3 lines
2.4 MiB
3 lines
2.4 MiB
/*! For license information please see landxml.browser.js.LICENSE.txt */
|
||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.landxml=e():t.landxml=e()}(self,(function(){return(()=>{var t={9831:(t,e,r)=>{"use strict";var n=r(6507),i=6378137;function o(t){var e=0;if(t&&t.length>0){e+=Math.abs(s(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(s(t[r]))}return e}function s(t){var e,r,n,o,s,h,u=0,c=t.length;if(c>2){for(h=0;h<c;h++)h===c-2?(n=c-2,o=c-1,s=0):h===c-1?(n=c-1,o=0,s=1):(n=h,o=h+1,s=h+2),e=t[n],r=t[o],u+=(a(t[s][0])-a(e[0]))*Math.sin(a(r[1]));u=u*i*i/2}return u}function a(t){return t*Math.PI/180}e.Z=function(t){return n.geomReduce(t,(function(t,e){return t+function(t){var e,r=0;switch(t.type){case"Polygon":return o(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)r+=o(t.coordinates[e]);return r;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}(e)}),0)}},9118:(t,e)=>{"use strict";function r(t){var e={type:"Feature"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"properties":case"geometry":return;default:e[r]=t[r]}})),e.properties=n(t.properties),e.geometry=i(t.geometry),e}function n(t){var e={};return t?(Object.keys(t).forEach((function(r){var i=t[r];"object"==typeof i?null===i?e[r]=null:Array.isArray(i)?e[r]=i.map((function(t){return t})):e[r]=n(i):e[r]=i})),e):e}function i(t){var e={type:t.type};return t.bbox&&(e.bbox=t.bbox),"GeometryCollection"===t.type?(e.geometries=t.geometries.map((function(t){return i(t)})),e):(e.coordinates=o(t.coordinates),e)}function o(t){var e=t;return"object"!=typeof e[0]?e.slice():e.map((function(t){return o(t)}))}e.Z=function(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return r(t);case"FeatureCollection":return function(t){var e={type:"FeatureCollection"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"features":return;default:e[r]=t[r]}})),e.features=t.features.map((function(t){return r(t)})),e}(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return i(t);default:throw new Error("unknown GeoJSON type")}}},5300:(t,e)=>{"use strict";function r(t,e,r){void 0===r&&(r={});var n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){return void 0===n&&(n={}),r({type:"Point",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,o=t;i<o.length;i++){var s=o[i];if(s.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var a=0;a<s[s.length-1].length;a++)if(s[s.length-1][a]!==s[0][a])throw new Error("First and last Position are not equivalent.")}return r({type:"Polygon",coordinates:t},e,n)}function o(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error("coordinates must be an array of two or more positions");return r({type:"LineString",coordinates:t},e,n)}function s(t,e){void 0===e&&(e={});var r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function a(t,e,n){return void 0===n&&(n={}),r({type:"MultiLineString",coordinates:t},e,n)}function h(t,e,n){return void 0===n&&(n={}),r({type:"MultiPoint",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:"MultiPolygon",coordinates:t},e,n)}function c(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t*n}function l(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t/n}function f(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\s*$/.test(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:e.earthRadius/1.0936},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1/1.0936},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case"Point":return n(e).geometry;case"LineString":return o(e).geometry;case"Polygon":return i(e).geometry;case"MultiPoint":return h(e).geometry;case"MultiLineString":return a(e).geometry;case"MultiPolygon":return u(e).geometry;default:throw new Error(t+" is invalid")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return i(t,e)})),r)},e.lineString=o,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return o(t,e)})),r)},e.featureCollection=s,e.multiLineString=a,e.multiPoint=h,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:"GeometryCollection",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=l,e.lengthToDegrees=function(t,e){return f(l(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=f,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e="kilometers"),void 0===r&&(r="kilometers"),!(t>=0))throw new Error("length must be a positive number");return c(l(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r="meters"),void 0===n&&(n="kilometers"),!(t>=0))throw new Error("area must be a positive number");var i=e.areaFactors[r];if(!i)throw new Error("invalid original units");var o=e.areaFactors[n];if(!o)throw new Error("invalid final units");return t/i*o},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!p(t))throw new Error("bbox must only contain numbers")}))},e.validateId=function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")},e.radians2degrees=function(){throw new Error("method has been renamed to `radiansToDegrees`")},e.degrees2radians=function(){throw new Error("method has been renamed to `degreesToRadians`")},e.distanceToDegrees=function(){throw new Error("method has been renamed to `lengthToDegrees`")},e.distanceToRadians=function(){throw new Error("method has been renamed to `lengthToRadians`")},e.radiansToDistance=function(){throw new Error("method has been renamed to `radiansToLength`")},e.bearingToAngle=function(){throw new Error("method has been renamed to `bearingToAzimuth`")},e.convertDistance=function(){throw new Error("method has been renamed to `convertLength`")}},6507:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(5300);function i(t,e,r){if(null!==t)for(var n,o,s,a,h,u,c,l,f=0,p=0,d=t.type,y="FeatureCollection"===d,g="Feature"===d,m=y?t.features.length:1,v=0;v<m;v++){h=(l=!!(c=y?t.features[v].geometry:g?t.geometry:t)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var w=0;w<h;w++){var b=0,M=0;if(null!==(a=l?c.geometries[w]:c)){u=a.coordinates;var _=a.type;switch(f=!r||"Polygon"!==_&&"MultiPolygon"!==_?0:1,_){case null:break;case"Point":if(!1===e(u,p,v,b,M))return!1;p++,b++;break;case"LineString":case"MultiPoint":for(n=0;n<u.length;n++){if(!1===e(u[n],p,v,b,M))return!1;p++,"MultiPoint"===_&&b++}"LineString"===_&&b++;break;case"Polygon":case"MultiLineString":for(n=0;n<u.length;n++){for(o=0;o<u[n].length-f;o++){if(!1===e(u[n][o],p,v,b,M))return!1;p++}"MultiLineString"===_&&b++,"Polygon"===_&&M++}"Polygon"===_&&b++;break;case"MultiPolygon":for(n=0;n<u.length;n++){for(M=0,o=0;o<u[n].length;o++){for(s=0;s<u[n][o].length-f;s++){if(!1===e(u[n][o][s],p,v,b,M))return!1;p++}M++}b++}break;case"GeometryCollection":for(n=0;n<a.geometries.length;n++)if(!1===i(a.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function o(t,e){var r;switch(t.type){case"FeatureCollection":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case"Feature":e(t.properties,0)}}function s(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function a(t,e){var r,n,i,o,s,a,h,u,c,l,f=0,p="FeatureCollection"===t.type,d="Feature"===t.type,y=p?t.features.length:1;for(r=0;r<y;r++){for(a=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,l=p?t.features[r].id:d?t.id:void 0,s=(h=!!a&&"GeometryCollection"===a.type)?a.geometries.length:1,i=0;i<s;i++)if(null!==(o=h?a.geometries[i]:a))switch(o.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(o,f,u,c,l))return!1;break;case"GeometryCollection":for(n=0;n<o.geometries.length;n++)if(!1===e(o.geometries[n],f,u,c,l))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,f,u,c,l))return!1;f++}}function h(t,e){a(t,(function(t,r,i,o,s){var a,h=null===t?null:t.type;switch(h){case null:case"Point":case"LineString":case"Polygon":return!1!==e(n.feature(t,i,{bbox:o,id:s}),r,0)&&void 0}switch(h){case"MultiPoint":a="Point";break;case"MultiLineString":a="LineString";break;case"MultiPolygon":a="Polygon"}for(var u=0;u<t.coordinates.length;u++){var c={type:a,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){h(t,(function(t,r,o){var s=0;if(t.geometry){var a=t.geometry.type;if("Point"!==a&&"MultiPoint"!==a){var h,u=0,c=0,l=0;return!1!==i(t,(function(i,a,f,p,d){if(void 0===h||r>u||p>c||d>l)return h=i,u=r,c=p,l=d,void(s=0);var y=n.lineString([h,i],t.properties);if(!1===e(y,r,o,d,s))return!1;s++,h=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error("geojson is required");h(t,(function(t,r,i){if(null!==t.geometry){var o=t.geometry.type,s=t.geometry.coordinates;switch(o){case"LineString":if(!1===e(t,r,i,0,0))return!1;break;case"Polygon":for(var a=0;a<s.length;a++)if(!1===e(n.lineString(s[a],t.properties),r,i,a))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var o=r;return i(t,(function(t,n,i,s,a){o=0===n&&void 0===r?t:e(o,t,n,i,s,a)}),n),o},e.propEach=o,e.propReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=s,e.featureReduce=function(t,e,r){var n=r;return s(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=a,e.geomReduce=function(t,e,r){var n=r;return a(t,(function(t,i,o,s,a){n=0===i&&void 0===r?t:e(n,t,i,o,s,a)})),n},e.flattenEach=h,e.flattenReduce=function(t,e,r){var n=r;return h(t,(function(t,i,o){n=0===i&&0===o&&void 0===r?t:e(n,t,i,o)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,o,s,a,h){n=!1===i&&void 0===r?t:e(n,t,o,s,a,h),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,o,s){n=0===i&&void 0===r?t:e(n,t,i,o,s)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,o=e.multiFeatureIndex||0,s=e.geometryIndex||0,a=e.segmentIndex||0,h=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),h=h||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":h=h||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":case"MultiPoint":return null;case"LineString":return a<0&&(a=u.length+a-1),n.lineString([u[a],u[a+1]],h,e);case"Polygon":return s<0&&(s=u.length+s),a<0&&(a=u[s].length+a-1),n.lineString([u[s][a],u[s][a+1]],h,e);case"MultiLineString":return o<0&&(o=u.length+o),a<0&&(a=u[o].length+a-1),n.lineString([u[o][a],u[o][a+1]],h,e);case"MultiPolygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),a<0&&(a=u[o][s].length-a-1),n.lineString([u[o][s][a],u[o][s][a+1]],h,e)}throw new Error("geojson is invalid")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,o=e.multiFeatureIndex||0,s=e.geometryIndex||0,a=e.coordIndex||0,h=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),h=h||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":h=h||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":return n.point(u,h,e);case"MultiPoint":return o<0&&(o=u.length+o),n.point(u[o],h,e);case"LineString":return a<0&&(a=u.length+a),n.point(u[a],h,e);case"Polygon":return s<0&&(s=u.length+s),a<0&&(a=u[s].length+a),n.point(u[s][a],h,e);case"MultiLineString":return o<0&&(o=u.length+o),a<0&&(a=u[o].length+a),n.point(u[o][a],h,e);case"MultiPolygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),a<0&&(a=u[o][s].length-a),n.point(u[o][s][a],h,e)}throw new Error("geojson is invalid")}},6934:(t,e,r)=>{"use strict";var n=r(4213),i=r(562),o=r(5300);e.Z=function(t,e,r){void 0===r&&(r={});var s=i.getGeom(t).coordinates,a=i.getGeom(e).coordinates,h=n.union(s,a);return 0===h.length?null:1===h.length?o.polygon(h[0],r.properties):o.multiPolygon(h,r.properties)}},562:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(5300);e.getCoord=function(t){if(!t)throw new Error("coord is required");if(!Array.isArray(t)){if("Feature"===t.type&&null!==t.geometry&&"Point"===t.geometry.type)return t.geometry.coordinates;if("Point"===t.type)return t.coordinates}if(Array.isArray(t)&&t.length>=2&&!Array.isArray(t[0])&&!Array.isArray(t[1]))return t;throw new Error("coord must be GeoJSON Point or an Array of numbers")},e.getCoords=function(t){if(Array.isArray(t))return t;if("Feature"===t.type){if(null!==t.geometry)return t.geometry.coordinates}else if(t.coordinates)return t.coordinates;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")},e.containsNumber=function t(e){if(e.length>1&&n.isNumber(e[0])&&n.isNumber(e[1]))return!0;if(Array.isArray(e[0])&&e[0].length)return t(e[0]);throw new Error("coordinates must only contain numbers")},e.geojsonType=function(t,e,r){if(!e||!r)throw new Error("type and name required");if(!t||t.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+t.type)},e.featureOf=function(t,e,r){if(!t)throw new Error("No feature passed");if(!r)throw new Error(".featureOf() requires a name");if(!t||"Feature"!==t.type||!t.geometry)throw new Error("Invalid input to "+r+", Feature with geometry required");if(!t.geometry||t.geometry.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+t.geometry.type)},e.collectionOf=function(t,e,r){if(!t)throw new Error("No featureCollection passed");if(!r)throw new Error(".collectionOf() requires a name");if(!t||"FeatureCollection"!==t.type)throw new Error("Invalid input to "+r+", FeatureCollection required");for(var n=0,i=t.features;n<i.length;n++){var o=i[n];if(!o||"Feature"!==o.type||!o.geometry)throw new Error("Invalid input to "+r+", Feature with geometry required");if(!o.geometry||o.geometry.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+o.geometry.type)}},e.getGeom=function(t){return"Feature"===t.type?t.geometry:t},e.getType=function(t,e){return"FeatureCollection"===t.type?"FeatureCollection":"GeometryCollection"===t.type?"GeometryCollection":"Feature"===t.type&&null!==t.geometry?t.geometry.type:t.type}},6007:(t,e,r)=>{"use strict";if(r(5706),r(3714),r(5994),r.g._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");function n(t,e,r){t[e]||Object.defineProperty(t,e,{writable:!0,configurable:!0,value:r})}r.g._babelPolyfill=!0,n(String.prototype,"padLeft","".padStart),n(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach((function(t){[][t]&&n(Array,t,Function.call.bind([][t]))}))},3714:function(t,e,r){!function(e){"use strict";var r,n=Object.prototype,i=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",h=o.toStringTag||"@@toStringTag",u=e.regeneratorRuntime;if(u)t.exports=u;else{(u=e.regeneratorRuntime=t.exports).wrap=w;var c="suspendedStart",l="suspendedYield",f="executing",p="completed",d={},y={};y[s]=function(){return this};var g=Object.getPrototypeOf,m=g&&g(g(P([])));m&&m!==n&&i.call(m,s)&&(y=m);var v=x.prototype=M.prototype=Object.create(y);_.prototype=v.constructor=x,x.constructor=_,x[h]=_.displayName="GeneratorFunction",u.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===_||"GeneratorFunction"===(e.displayName||e.name))},u.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,x):(t.__proto__=x,h in t||(t[h]="GeneratorFunction")),t.prototype=Object.create(v),t},u.awrap=function(t){return{__await:t}},E(S.prototype),S.prototype[a]=function(){return this},u.AsyncIterator=S,u.async=function(t,e,r,n){var i=new S(w(t,e,r,n));return u.isGeneratorFunction(e)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},E(v),v[h]="Generator",v[s]=function(){return this},v.toString=function(){return"[object Generator]"},u.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},u.values=P,N.prototype={constructor:N,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(I),!t)for(var e in this)"t"===e.charAt(0)&&i.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=r)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(n,i){return a.type="throw",a.arg=t,e.next=n,i&&(e.method="next",e.arg=r),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return n("end");if(s.tryLoc<=this.prev){var h=i.call(s,"catchLoc"),u=i.call(s,"finallyLoc");if(h&&u){if(this.prev<s.catchLoc)return n(s.catchLoc,!0);if(this.prev<s.finallyLoc)return n(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return n(s.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return n(s.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=t,s.arg=e,o?(this.method="next",this.next=o.finallyLoc,d):this.complete(s)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),d},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),I(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;I(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:P(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),d}}}function w(t,e,r,n){var i=e&&e.prototype instanceof M?e:M,o=Object.create(i.prototype),s=new N(n||[]);return o._invoke=function(t,e,r){var n=c;return function(i,o){if(n===f)throw new Error("Generator is already running");if(n===p){if("throw"===i)throw o;return A()}for(r.method=i,r.arg=o;;){var s=r.delegate;if(s){var a=O(s,r);if(a){if(a===d)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===c)throw n=p,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=f;var h=b(t,e,r);if("normal"===h.type){if(n=r.done?p:l,h.arg===d)continue;return{value:h.arg,done:r.done}}"throw"===h.type&&(n=p,r.method="throw",r.arg=h.arg)}}}(t,r,s),o}function b(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function M(){}function _(){}function x(){}function E(t){["next","throw","return"].forEach((function(e){t[e]=function(t){return this._invoke(e,t)}}))}function S(t){function r(e,n,o,s){var a=b(t[e],t,n);if("throw"!==a.type){var h=a.arg,u=h.value;return u&&"object"==typeof u&&i.call(u,"__await")?Promise.resolve(u.__await).then((function(t){r("next",t,o,s)}),(function(t){r("throw",t,o,s)})):Promise.resolve(u).then((function(t){h.value=t,o(h)}),s)}s(a.arg)}var n;"object"==typeof e.process&&e.process.domain&&(r=e.process.domain.bind(r)),this._invoke=function(t,e){function i(){return new Promise((function(n,i){r(t,e,n,i)}))}return n=n?n.then(i,i):i()}}function O(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,O(t,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=b(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function T(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function N(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(T,this),this.reset(!0)}function P(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(i.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=r,e.done=!0,e};return o.next=o}}return{next:A}}function A(){return{value:r,done:!0}}}("object"==typeof r.g?r.g:"object"==typeof window?window:"object"==typeof self?self:this)},9584:(t,e)=>{"use strict";e.byteLength=function(t){var e=h(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=h(t),s=o[0],a=o[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,s,a)),c=0,l=a>0?s-4:s;for(r=0;r<l;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===a&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===a&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=16383,a=0,h=n-i;a<h;a+=s)o.push(u(t,a,a+s>h?h:a+s));return 1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,a=o.length;s<a;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function h(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t,e,n){for(var i,o,s=[],a=e;a<n;a+=3)i=(t[a]<<16&16711680)+(t[a+1]<<8&65280)+(255&t[a+2]),s.push(r[(o=i)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},1666:(t,e,r)=>{"use strict";var n=r(9584),i=r(7701);e.Buffer=a,e.SlowBuffer=function(t){return+t!=t&&(t=0),a.alloc(+t)},e.INSPECT_MAX_BYTES=50;var o=2147483647;function s(t){if(t>o)throw new RangeError("Invalid typed array length");var e=new Uint8Array(t);return e.__proto__=a.prototype,e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return c(t)}return h(t,e,r)}function h(t,e,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return B(t)?function(t,e,r){if(e<0||t.byteLength<e)throw new RangeError("'offset' is out of bounds");if(t.byteLength<e+(r||0))throw new RangeError("'length' is out of bounds");var n;return(n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r)).__proto__=a.prototype,n}(t,e,r):"string"==typeof t?function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!a.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');var r=0|p(t,e),n=s(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e):function(t){if(a.isBuffer(t)){var e=0|f(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}if(t){if(U(t)||"length"in t)return"number"!=typeof t.length||q(t.length)?s(0):l(t);if("Buffer"===t.type&&Array.isArray(t.data))return l(t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t)}function u(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function c(t){return u(t),s(t<0?0:0|f(t))}function l(t){for(var e=t.length<0?0:0|f(t.length),r=s(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function f(t){if(t>=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function p(t,e){if(a.isBuffer(t))return t.length;if(U(t)||B(t))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return R(t).length;default:if(n)return F(t).length;e=(""+e).toLowerCase(),n=!0}}function d(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return N(this,e,r);case"utf8":case"utf-8":return S(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return I(this,e,r);case"base64":return E(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function y(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function g(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),q(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,s=1,a=t.length,h=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,h/=2,r/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var c=-1;for(o=r;o<a;o++)if(u(t,o)===u(e,-1===c?0:o-c)){if(-1===c&&(c=o),o-c+1===h)return c*s}else-1!==c&&(o-=o-c),c=-1}else for(r+h>a&&(r=a-h),o=r;o>=0;o--){for(var l=!0,f=0;f<h;f++)if(u(t,o+f)!==u(e,f)){l=!1;break}if(l)return o}return-1}function v(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s<n;++s){var a=parseInt(e.substr(2*s,2),16);if(q(a))return s;t[r+s]=a}return s}function w(t,e,r,n){return G(F(e,t.length-r),t,r,n)}function b(t,e,r,n){return G(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function M(t,e,r,n){return b(t,e,r,n)}function _(t,e,r,n){return G(R(e),t,r,n)}function x(t,e,r,n){return G(function(t,e){for(var r,n,i,o=[],s=0;s<t.length&&!((e-=2)<0);++s)n=(r=t.charCodeAt(s))>>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function E(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function S(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var o,s,a,h,u=t[i],c=null,l=u>239?4:u>223?3:u>191?2:1;if(i+l<=r)switch(l){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(h=(31&u)<<6|63&o)>127&&(c=h);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(h=(15&u)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(c=h);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(c=h)}null===c?(c=65533,l=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=l}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}e.kMaxLength=o,a.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}(),a.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),a.poolSize=8192,a.from=function(t,e,r){return h(t,e,r)},a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,a.alloc=function(t,e,r){return function(t,e,r){return u(t),t<=0?s(t):void 0!==e?"string"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},a.allocUnsafe=function(t){return c(t)},a.allocUnsafeSlow=function(t){return c(t)},a.isBuffer=function(t){return null!=t&&!0===t._isBuffer},a.compare=function(t,e){if(!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,i=0,o=Math.min(r,n);i<o;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},a.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},a.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return a.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=a.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var o=t[r];if(!a.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,i),i+=o.length}return n},a.byteLength=p,a.prototype._isBuffer=!0,a.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)y(this,e,e+1);return this},a.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)y(this,e,e+3),y(this,e+1,e+2);return this},a.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)y(this,e,e+7),y(this,e+1,e+6),y(this,e+2,e+5),y(this,e+3,e+4);return this},a.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?S(this,0,t):d.apply(this,arguments)},a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),"<Buffer "+t+">"},a.prototype.compare=function(t,e,r,n,i){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(e>>>=0),h=Math.min(o,s),u=this.slice(n,i),c=t.slice(e,r),l=0;l<h;++l)if(u[l]!==c[l]){o=u[l],s=c[l];break}return o<s?-1:s<o?1:0},a.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},a.prototype.indexOf=function(t,e,r){return g(this,t,e,r,!0)},a.prototype.lastIndexOf=function(t,e,r){return g(this,t,e,r,!1)},a.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":return b(this,t,e,r);case"latin1":case"binary":return M(this,t,e,r);case"base64":return _(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function T(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function I(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function N(t,e,r){var n,i=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>i)&&(r=i);for(var o="",s=e;s<r;++s)o+=(n=t[s])<16?"0"+n.toString(16):n.toString(16);return o}function P(t,e,r){for(var n=t.slice(e,r),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function A(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function C(t,e,r,n,i,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<o)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function D(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function k(t,e,r,n,o){return e=+e,r>>>=0,o||D(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function L(t,e,r,n,o){return e=+e,r>>>=0,o||D(t,0,r,8),i.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return n.__proto__=a.prototype,n},a.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n},a.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},a.prototype.readUInt8=function(t,e){return t>>>=0,e||A(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||A(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||A(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||A(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||A(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return t>>>=0,e||A(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||A(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||A(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||A(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||A(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return t>>>=0,e||A(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||A(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||A(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||A(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||C(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o<r&&(i*=256);)this[e+o]=t/i&255;return e+r},a.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||C(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);C(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o<r&&(s*=256);)t<0&&0===a&&0!==this[e+o-1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},a.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);C(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeFloatLE=function(t,e,r){return k(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return k(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return L(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return L(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i,o=n-r;if(this===t&&r<e&&e<n)for(i=o-1;i>=0;--i)t[i+e]=this[i+r];else if(o<1e3)for(i=0;i<o;++i)t[i+e]=this[i+r];else Uint8Array.prototype.set.call(t,this.subarray(r,r+o),e);return o},a.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!a.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;var o;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o<r;++o)this[o]=t;else{var s=a.isBuffer(t)?t:new a(t,n),h=s.length;for(o=0;o<r-e;++o)this[o+e]=s[o%h]}return this};var j=/[^+/0-9A-Za-z-_]/g;function F(t,e){var r;e=e||1/0;for(var n=t.length,i=null,o=[],s=0;s<n;++s){if((r=t.charCodeAt(s))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function R(t){return n.toByteArray(function(t){if((t=t.trim().replace(j,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function G(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function B(t){return t instanceof ArrayBuffer||null!=t&&null!=t.constructor&&"ArrayBuffer"===t.constructor.name&&"number"==typeof t.byteLength}function U(t){return"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(t)}function q(t){return t!=t}},5994:(t,e,r)=>{r(6581),t.exports=r(5042).RegExp.escape},5266:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},437:(t,e,r)=>{var n=r(9641);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},9854:(t,e,r)=>{var n=r(1379)("unscopables"),i=Array.prototype;null==i[n]&&r(342)(i,n,{}),t.exports=function(t){i[n][t]=!0}},1703:(t,e,r)=>{"use strict";var n=r(8840)(!0);t.exports=function(t,e,r){return e+(r?n(t,e).length:1)}},9151:t=>{t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},4883:(t,e,r)=>{var n=r(2962);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},4248:(t,e,r)=>{"use strict";var n=r(9542),i=r(3693),o=r(1721);t.exports=[].copyWithin||function(t,e){var r=n(this),s=o(r.length),a=i(t,s),h=i(e,s),u=arguments.length>2?arguments[2]:void 0,c=Math.min((void 0===u?s:i(u,s))-h,s-a),l=1;for(h<a&&a<h+c&&(l=-1,h+=c-1,a+=c-1);c-- >0;)h in r?r[a]=r[h]:delete r[a],a+=l,h+=l;return r}},6101:(t,e,r)=>{"use strict";var n=r(9542),i=r(3693),o=r(1721);t.exports=function(t){for(var e=n(this),r=o(e.length),s=arguments.length,a=i(s>1?arguments[1]:void 0,r),h=s>2?arguments[2]:void 0,u=void 0===h?r:i(h,r);u>a;)e[a++]=t;return e}},4181:(t,e,r)=>{var n=r(8372);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},9699:(t,e,r)=>{var n=r(7931),i=r(1721),o=r(3693);t.exports=function(t){return function(e,r,s){var a,h=n(e),u=i(h.length),c=o(s,u);if(t&&r!=r){for(;u>c;)if((a=h[c++])!=a)return!0}else for(;u>c;c++)if((t||c in h)&&h[c]===r)return t||c||0;return!t&&-1}}},4195:(t,e,r)=>{var n=r(9756),i=r(8650),o=r(9542),s=r(1721),a=r(2997);t.exports=function(t,e){var r=1==t,h=2==t,u=3==t,c=4==t,l=6==t,f=5==t||l,p=e||a;return function(e,a,d){for(var y,g,m=o(e),v=i(m),w=n(a,d,3),b=s(v.length),M=0,_=r?p(e,b):h?p(e,0):void 0;b>M;M++)if((f||M in v)&&(g=w(y=v[M],M,m),t))if(r)_[M]=g;else if(g)switch(t){case 3:return!0;case 5:return y;case 6:return M;case 2:_.push(y)}else if(c)return!1;return l?-1:u||c?c:_}}},3780:(t,e,r)=>{var n=r(5266),i=r(9542),o=r(8650),s=r(1721);t.exports=function(t,e,r,a,h){n(e);var u=i(t),c=o(u),l=s(u.length),f=h?l-1:0,p=h?-1:1;if(r<2)for(;;){if(f in c){a=c[f],f+=p;break}if(f+=p,h?f<0:l<=f)throw TypeError("Reduce of empty array with no initial value")}for(;h?f>=0:l>f;f+=p)f in c&&(a=e(a,c[f],f,u));return a}},4046:(t,e,r)=>{var n=r(2962),i=r(5159),o=r(1379)("species");t.exports=function(t){var e;return i(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!i(e.prototype)||(e=void 0),n(e)&&null===(e=e[o])&&(e=void 0)),void 0===e?Array:e}},2997:(t,e,r)=>{var n=r(4046);t.exports=function(t,e){return new(n(t))(e)}},7591:(t,e,r)=>{"use strict";var n=r(5266),i=r(2962),o=r(6386),s=[].slice,a={},h=function(t,e,r){if(!(e in a)){for(var n=[],i=0;i<e;i++)n[i]="a["+i+"]";a[e]=Function("F,a","return new F("+n.join(",")+")")}return a[e](t,r)};t.exports=Function.bind||function(t){var e=n(this),r=s.call(arguments,1),a=function(){var n=r.concat(s.call(arguments));return this instanceof a?h(e,n.length,n):o(e,n,t)};return i(e.prototype)&&(a.prototype=e.prototype),a}},3753:(t,e,r)=>{var n=r(9641),i=r(1379)("toStringTag"),o="Arguments"==n(function(){return arguments}());t.exports=function(t){var e,r,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?r:o?n(e):"Object"==(s=n(e))&&"function"==typeof e.callee?"Arguments":s}},9641:t=>{var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},9888:(t,e,r)=>{"use strict";var n=r(3269).f,i=r(8765),o=r(9490),s=r(9756),a=r(9151),h=r(8372),u=r(2711),c=r(2612),l=r(1955),f=r(4421),p=r(5687).fastKey,d=r(4136),y=f?"_s":"size",g=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,u){var c=t((function(t,n){a(t,c,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[y]=0,null!=n&&h(n,r,t[u],t)}));return o(c.prototype,{clear:function(){for(var t=d(this,e),r=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete r[n.i];t._f=t._l=void 0,t[y]=0},delete:function(t){var r=d(this,e),n=g(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[y]--}return!!n},forEach:function(t){d(this,e);for(var r,n=s(t,arguments.length>1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function(t){return!!g(d(this,e),t)}}),f&&n(c.prototype,"size",{get:function(){return d(this,e)[y]}}),c},def:function(t,e,r){var n,i,o=g(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[y]++,"F"!==i&&(t._i[i]=o)),t},getEntry:g,setStrong:function(t,e,r){u(t,e,(function(t,r){this._t=d(t,e),this._k=r,this._l=void 0}),(function(){for(var t=this,e=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?c(0,"keys"==e?r.k:"values"==e?r.v:[r.k,r.v]):(t._t=void 0,c(1))}),r?"entries":"values",!r,!0),l(e)}}},7337:(t,e,r)=>{var n=r(3753),i=r(4181);t.exports=function(t){return function(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},3366:(t,e,r)=>{"use strict";var n=r(9490),i=r(5687).getWeak,o=r(4883),s=r(2962),a=r(9151),h=r(8372),u=r(4195),c=r(3132),l=r(4136),f=u(5),p=u(6),d=0,y=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},m=function(t,e){return f(t.a,(function(t){return t[0]===e}))};g.prototype={get:function(t){var e=m(this,t);if(e)return e[1]},has:function(t){return!!m(this,t)},set:function(t,e){var r=m(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,(function(e){return e[0]===t}));return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var u=t((function(t,n){a(t,u,e,"_i"),t._t=e,t._i=d++,t._l=void 0,null!=n&&h(n,r,t[o],t)}));return n(u.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?y(l(this,e)).delete(t):r&&c(r,this._i)&&delete r[this._i]},has:function(t){if(!s(t))return!1;var r=i(t);return!0===r?y(l(this,e)).has(t):r&&c(r,this._i)}}),u},def:function(t,e,r){var n=i(o(e),!0);return!0===n?y(t).set(e,r):n[t._i]=r,t},ufstore:y}},6909:(t,e,r)=>{"use strict";var n=r(7626),i=r(3310),o=r(3682),s=r(9490),a=r(5687),h=r(8372),u=r(9151),c=r(2962),l=r(6099),f=r(3762),p=r(889),d=r(7432);t.exports=function(t,e,r,y,g,m){var v=n[t],w=v,b=g?"set":"add",M=w&&w.prototype,_={},x=function(t){var e=M[t];o(M,t,"delete"==t||"has"==t?function(t){return!(m&&!c(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,r){return e.call(this,0===t?0:t,r),this})};if("function"==typeof w&&(m||M.forEach&&!l((function(){(new w).entries().next()})))){var E=new w,S=E[b](m?{}:-0,1)!=E,O=l((function(){E.has(1)})),T=f((function(t){new w(t)})),I=!m&&l((function(){for(var t=new w,e=5;e--;)t[b](e,e);return!t.has(-0)}));T||((w=e((function(e,r){u(e,w,t);var n=d(new v,e,w);return null!=r&&h(r,g,n[b],n),n}))).prototype=M,M.constructor=w),(O||I)&&(x("delete"),x("has"),g&&x("get")),(I||S)&&x(b),m&&M.clear&&delete M.clear}else w=y.getConstructor(e,t,g,b),s(w.prototype,r),a.NEED=!0;return p(w,t),_[t]=w,i(i.G+i.W+i.F*(w!=v),_),m||y.setStrong(w,t,g),w}},5042:t=>{var e=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=e)},7492:(t,e,r)=>{"use strict";var n=r(3269),i=r(1519);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},9756:(t,e,r)=>{var n=r(5266);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},1686:(t,e,r)=>{"use strict";var n=r(6099),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n((function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-50000000000001))}))||!n((function(){o.call(new Date(NaN))}))?function(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),r=t.getUTCMilliseconds(),n=e<0?"-":e>9999?"+":"";return n+("00000"+Math.abs(e)).slice(n?-6:-4)+"-"+s(t.getUTCMonth()+1)+"-"+s(t.getUTCDate())+"T"+s(t.getUTCHours())+":"+s(t.getUTCMinutes())+":"+s(t.getUTCSeconds())+"."+(r>99?r:"0"+s(r))+"Z"}:o},3603:(t,e,r)=>{"use strict";var n=r(4883),i=r(2851),o="number";t.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),t!=o)}},4821:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},4421:(t,e,r)=>{t.exports=!r(6099)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},5468:(t,e,r)=>{var n=r(2962),i=r(7626).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},5348:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},989:(t,e,r)=>{var n=r(5304),i=r(4365),o=r(4498);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),h=o.f,u=0;a.length>u;)h.call(t,s=a[u++])&&e.push(s);return e}},3310:(t,e,r)=>{var n=r(7626),i=r(5042),o=r(342),s=r(3682),a=r(9756),h=function(t,e,r){var u,c,l,f,p=t&h.F,d=t&h.G,y=t&h.S,g=t&h.P,m=t&h.B,v=d?n:y?n[e]||(n[e]={}):(n[e]||{}).prototype,w=d?i:i[e]||(i[e]={}),b=w.prototype||(w.prototype={});for(u in d&&(r=e),r)l=((c=!p&&v&&void 0!==v[u])?v:r)[u],f=m&&c?a(l,n):g&&"function"==typeof l?a(Function.call,l):l,v&&s(v,u,l,t&h.U),w[u]!=l&&o(w,u,f),g&&b[u]!=l&&(b[u]=l)};n.core=i,h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,h.U=64,h.R=128,t.exports=h},9569:(t,e,r)=>{var n=r(1379)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},6099:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},7627:(t,e,r)=>{"use strict";r(1196);var n=r(3682),i=r(342),o=r(6099),s=r(4821),a=r(1379),h=r(942),u=a("species"),c=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var f=a(t),p=!o((function(){var e={};return e[f]=function(){return 7},7!=""[t](e)})),d=p?!o((function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[u]=function(){return r}),r[f](""),!e})):void 0;if(!p||!d||"replace"===t&&!c||"split"===t&&!l){var y=/./[f],g=r(s,f,""[t],(function(t,e,r,n,i){return e.exec===h?p&&!i?{done:!0,value:y.call(e,r,n)}:{done:!0,value:t.call(r,e,n)}:{done:!1}})),m=g[0],v=g[1];n(String.prototype,t,m),i(RegExp.prototype,f,2==e?function(t,e){return v.call(t,this,e)}:function(t){return v.call(t,this)})}}},6403:(t,e,r)=>{"use strict";var n=r(4883);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},2342:(t,e,r)=>{"use strict";var n=r(5159),i=r(2962),o=r(1721),s=r(9756),a=r(1379)("isConcatSpreadable");t.exports=function t(e,r,h,u,c,l,f,p){for(var d,y,g=c,m=0,v=!!f&&s(f,p,3);m<u;){if(m in h){if(d=v?v(h[m],m,r):h[m],y=!1,i(d)&&(y=void 0!==(y=d[a])?!!y:n(d)),y&&l>0)g=t(e,r,d,o(d.length),g,l-1)-1;else{if(g>=9007199254740991)throw TypeError();e[g]=d}g++}m++}return g}},8372:(t,e,r)=>{var n=r(9756),i=r(7418),o=r(8244),s=r(4883),a=r(1721),h=r(172),u={},c={},l=t.exports=function(t,e,r,l,f){var p,d,y,g,m=f?function(){return t}:h(t),v=n(r,l,e?2:1),w=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(o(m)){for(p=a(t.length);p>w;w++)if((g=e?v(s(d=t[w])[0],d[1]):v(t[w]))===u||g===c)return g}else for(y=m.call(t);!(d=y.next()).done;)if((g=i(y,v,d.value,e))===u||g===c)return g};l.BREAK=u,l.RETURN=c},982:(t,e,r)=>{t.exports=r(6948)("native-function-to-string",Function.toString)},7626:t=>{var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},3132:t=>{var e={}.hasOwnProperty;t.exports=function(t,r){return e.call(t,r)}},342:(t,e,r)=>{var n=r(3269),i=r(1519);t.exports=r(4421)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},5696:(t,e,r)=>{var n=r(7626).document;t.exports=n&&n.documentElement},626:(t,e,r)=>{t.exports=!r(4421)&&!r(6099)((function(){return 7!=Object.defineProperty(r(5468)("div"),"a",{get:function(){return 7}}).a}))},7432:(t,e,r)=>{var n=r(2962),i=r(9298).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},6386:t=>{t.exports=function(t,e,r){var n=void 0===r;switch(e.length){case 0:return n?t():t.call(r);case 1:return n?t(e[0]):t.call(r,e[0]);case 2:return n?t(e[0],e[1]):t.call(r,e[0],e[1]);case 3:return n?t(e[0],e[1],e[2]):t.call(r,e[0],e[1],e[2]);case 4:return n?t(e[0],e[1],e[2],e[3]):t.call(r,e[0],e[1],e[2],e[3])}return t.apply(r,e)}},8650:(t,e,r)=>{var n=r(9641);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},8244:(t,e,r)=>{var n=r(568),i=r(1379)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},5159:(t,e,r)=>{var n=r(9641);t.exports=Array.isArray||function(t){return"Array"==n(t)}},4697:(t,e,r)=>{var n=r(2962),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},2962:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},2432:(t,e,r)=>{var n=r(2962),i=r(9641),o=r(1379)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},7418:(t,e,r)=>{var n=r(4883);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},1700:(t,e,r)=>{"use strict";var n=r(8765),i=r(1519),o=r(889),s={};r(342)(s,r(1379)("iterator"),(function(){return this})),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},2711:(t,e,r)=>{"use strict";var n=r(7423),i=r(3310),o=r(3682),s=r(342),a=r(568),h=r(1700),u=r(889),c=r(4550),l=r(1379)("iterator"),f=!([].keys&&"next"in[].keys()),p="keys",d="values",y=function(){return this};t.exports=function(t,e,r,g,m,v,w){h(r,e,g);var b,M,_,x=function(t){if(!f&&t in T)return T[t];switch(t){case p:case d:return function(){return new r(this,t)}}return function(){return new r(this,t)}},E=e+" Iterator",S=m==d,O=!1,T=t.prototype,I=T[l]||T["@@iterator"]||m&&T[m],N=I||x(m),P=m?S?x("entries"):N:void 0,A="Array"==e&&T.entries||I;if(A&&(_=c(A.call(new t)))!==Object.prototype&&_.next&&(u(_,E,!0),n||"function"==typeof _[l]||s(_,l,y)),S&&I&&I.name!==d&&(O=!0,N=function(){return I.call(this)}),n&&!w||!f&&!O&&T[l]||s(T,l,N),a[e]=N,a[E]=y,m)if(b={values:S?N:x(d),keys:v?N:x(p),entries:P},w)for(M in b)M in T||o(T,M,b[M]);else i(i.P+i.F*(f||O),e,b);return b}},3762:(t,e,r)=>{var n=r(1379)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},2612:t=>{t.exports=function(t,e){return{value:e,done:!!t}}},568:t=>{t.exports={}},7423:t=>{t.exports=!1},4993:t=>{var e=Math.expm1;t.exports=!e||e(10)>22025.465794806718||e(10)<22025.465794806718||-2e-17!=e(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:e},7368:(t,e,r)=>{var n=r(6993),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),h=i(2,-126);t.exports=Math.fround||function(t){var e,r,i=Math.abs(t),u=n(t);return i<h?u*(i/h/s+1/o-1/o)*h*s:(r=(e=(1+s/o)*i)-(e-i))>a||r!=r?u*(1/0):u*r}},3526:t=>{t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},5284:t=>{t.exports=Math.scale||function(t,e,r,n,i){return 0===arguments.length||t!=t||e!=e||r!=r||n!=n||i!=i?NaN:t===1/0||t===-1/0?t:(t-e)*(i-n)/(r-e)+n}},6993:t=>{t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},5687:(t,e,r)=>{var n=r(3549)("meta"),i=r(2962),o=r(3132),s=r(3269).f,a=0,h=Object.isExtensible||function(){return!0},u=!r(6099)((function(){return h(Object.preventExtensions({}))})),c=function(t){s(t,n,{value:{i:"O"+ ++a,w:{}}})},l=t.exports={KEY:n,NEED:!1,fastKey:function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,n)){if(!h(t))return"F";if(!e)return"E";c(t)}return t[n].i},getWeak:function(t,e){if(!o(t,n)){if(!h(t))return!0;if(!e)return!1;c(t)}return t[n].w},onFreeze:function(t){return u&&l.NEED&&h(t)&&!o(t,n)&&c(t),t}}},9913:(t,e,r)=>{var n=r(8780),i=r(3310),o=r(6948)("metadata"),s=o.store||(o.store=new(r(965))),a=function(t,e,r){var i=s.get(t);if(!i){if(!r)return;s.set(t,i=new n)}var o=i.get(e);if(!o){if(!r)return;i.set(e,o=new n)}return o};t.exports={store:s,map:a,has:function(t,e,r){var n=a(e,r,!1);return void 0!==n&&n.has(t)},get:function(t,e,r){var n=a(e,r,!1);return void 0===n?void 0:n.get(t)},set:function(t,e,r,n){a(r,n,!0).set(t,e)},keys:function(t,e){var r=a(t,e,!1),n=[];return r&&r.forEach((function(t,e){n.push(e)})),n},key:function(t){return void 0===t||"symbol"==typeof t?t:String(t)},exp:function(t){i(i.S,"Reflect",t)}}},48:(t,e,r)=>{var n=r(7626),i=r(9788).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,h="process"==r(9641)(s);t.exports=function(){var t,e,r,u=function(){var n,i;for(h&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(h)r=function(){s.nextTick(u)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var c=a.resolve(void 0);r=function(){c.then(u)}}else r=function(){i.call(n,u)};else{var l=!0,f=document.createTextNode("");new o(u).observe(f,{characterData:!0}),r=function(){f.data=l=!l}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},2690:(t,e,r)=>{"use strict";var n=r(5266);function i(t){var e,r;this.promise=new t((function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n})),this.resolve=n(e),this.reject=n(r)}t.exports.f=function(t){return new i(t)}},8874:(t,e,r)=>{"use strict";var n=r(4421),i=r(5304),o=r(4365),s=r(4498),a=r(9542),h=r(8650),u=Object.assign;t.exports=!u||r(6099)((function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach((function(t){e[t]=t})),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n}))?function(t,e){for(var r=a(t),u=arguments.length,c=1,l=o.f,f=s.f;u>c;)for(var p,d=h(arguments[c++]),y=l?i(d).concat(l(d)):i(d),g=y.length,m=0;g>m;)p=y[m++],n&&!f.call(d,p)||(r[p]=d[p]);return r}:u},8765:(t,e,r)=>{var n=r(4883),i=r(9504),o=r(5348),s=r(9111)("IE_PROTO"),a=function(){},h=function(){var t,e=r(5468)("iframe"),n=o.length;for(e.style.display="none",r(5696).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write("<script>document.F=Object<\/script>"),t.close(),h=t.F;n--;)delete h.prototype[o[n]];return h()};t.exports=Object.create||function(t,e){var r;return null!==t?(a.prototype=n(t),r=new a,a.prototype=null,r[s]=t):r=h(),void 0===e?r:i(r,e)}},3269:(t,e,r)=>{var n=r(4883),i=r(626),o=r(2851),s=Object.defineProperty;e.f=r(4421)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return s(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},9504:(t,e,r)=>{var n=r(3269),i=r(4883),o=r(5304);t.exports=r(4421)?Object.defineProperties:function(t,e){i(t);for(var r,s=o(e),a=s.length,h=0;a>h;)n.f(t,r=s[h++],e[r]);return t}},4258:(t,e,r)=>{"use strict";t.exports=r(7423)||!r(6099)((function(){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete r(7626)[t]}))},7765:(t,e,r)=>{var n=r(4498),i=r(1519),o=r(7931),s=r(2851),a=r(3132),h=r(626),u=Object.getOwnPropertyDescriptor;e.f=r(4421)?u:function(t,e){if(t=o(t),e=s(e,!0),h)try{return u(t,e)}catch(t){}if(a(t,e))return i(!n.f.call(t,e),t[e])}},7831:(t,e,r)=>{var n=r(7931),i=r(8918).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&"[object Window]"==o.call(t)?function(t){try{return i(t)}catch(t){return s.slice()}}(t):i(n(t))}},8918:(t,e,r)=>{var n=r(8406),i=r(5348).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},4365:(t,e)=>{e.f=Object.getOwnPropertySymbols},4550:(t,e,r)=>{var n=r(3132),i=r(9542),o=r(9111)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},8406:(t,e,r)=>{var n=r(3132),i=r(7931),o=r(9699)(!1),s=r(9111)("IE_PROTO");t.exports=function(t,e){var r,a=i(t),h=0,u=[];for(r in a)r!=s&&n(a,r)&&u.push(r);for(;e.length>h;)n(a,r=e[h++])&&(~o(u,r)||u.push(r));return u}},5304:(t,e,r)=>{var n=r(8406),i=r(5348);t.exports=Object.keys||function(t){return n(t,i)}},4498:(t,e)=>{e.f={}.propertyIsEnumerable},4955:(t,e,r)=>{var n=r(3310),i=r(5042),o=r(6099);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o((function(){r(1)})),"Object",s)}},5587:(t,e,r)=>{var n=r(4421),i=r(5304),o=r(7931),s=r(4498).f;t.exports=function(t){return function(e){for(var r,a=o(e),h=i(a),u=h.length,c=0,l=[];u>c;)r=h[c++],n&&!s.call(a,r)||l.push(t?[r,a[r]]:a[r]);return l}}},1529:(t,e,r)=>{var n=r(8918),i=r(4365),o=r(4883),s=r(7626).Reflect;t.exports=s&&s.ownKeys||function(t){var e=n.f(o(t)),r=i.f;return r?e.concat(r(t)):e}},4060:(t,e,r)=>{var n=r(7626).parseFloat,i=r(6426).trim;t.exports=1/n(r(2420)+"-0")!=-1/0?function(t){var e=i(String(t),3),r=n(e);return 0===r&&"-"==e.charAt(0)?-0:r}:n},9362:(t,e,r)=>{var n=r(7626).parseInt,i=r(6426).trim,o=r(2420),s=/^[-+]?0[xX]/;t.exports=8!==n(o+"08")||22!==n(o+"0x16")?function(t,e){var r=i(String(t),3);return n(r,e>>>0||(s.test(r)?16:10))}:n},5222:t=>{t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},649:(t,e,r)=>{var n=r(4883),i=r(2962),o=r(2690);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},1519:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},9490:(t,e,r)=>{var n=r(3682);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},3682:(t,e,r)=>{var n=r(7626),i=r(342),o=r(3132),s=r(3549)("src"),a=r(982),h="toString",u=(""+a).split(h);r(5042).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var h="function"==typeof r;h&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(h&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,h,(function(){return"function"==typeof this&&this[s]||a.call(this)}))},7047:(t,e,r)=>{"use strict";var n=r(3753),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},942:(t,e,r)=>{"use strict";var n,i,o=r(6403),s=RegExp.prototype.exec,a=String.prototype.replace,h=s,u=(n=/a/,i=/b*/g,s.call(n,"a"),s.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),c=void 0!==/()??/.exec("")[1];(u||c)&&(h=function(t){var e,r,n,i,h=this;return c&&(r=new RegExp("^"+h.source+"$(?!\\s)",o.call(h))),u&&(e=h.lastIndex),n=s.call(h,t),u&&n&&(h.lastIndex=h.global?n.index+n[0].length:e),c&&n&&n.length>1&&a.call(n[0],r,(function(){for(i=1;i<arguments.length-2;i++)void 0===arguments[i]&&(n[i]=void 0)})),n}),t.exports=h},8360:t=>{t.exports=function(t,e){var r=e===Object(e)?function(t){return e[t]}:e;return function(e){return String(e).replace(t,r)}}},3244:t=>{t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},8807:(t,e,r)=>{"use strict";var n=r(3310),i=r(5266),o=r(9756),s=r(8372);t.exports=function(t){n(n.S,t,{from:function(t){var e,r,n,a,h=arguments[1];return i(this),(e=void 0!==h)&&i(h),null==t?new this:(r=[],e?(n=0,a=o(h,arguments[2],2),s(t,!1,(function(t){r.push(a(t,n++))}))):s(t,!1,r.push,r),new this(r))}})}},6931:(t,e,r)=>{"use strict";var n=r(3310);t.exports=function(t){n(n.S,t,{of:function(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},9298:(t,e,r)=>{var n=r(2962),i=r(4883),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(9756)(Function.call,r(7765).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,r){return o(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:o}},1955:(t,e,r)=>{"use strict";var n=r(7626),i=r(3269),o=r(4421),s=r(1379)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},889:(t,e,r)=>{var n=r(3269).f,i=r(3132),o=r(1379)("toStringTag");t.exports=function(t,e,r){t&&!i(t=r?t:t.prototype,o)&&n(t,o,{configurable:!0,value:e})}},9111:(t,e,r)=>{var n=r(6948)("keys"),i=r(3549);t.exports=function(t){return n[t]||(n[t]=i(t))}},6948:(t,e,r)=>{var n=r(5042),i=r(7626),o="__core-js_shared__",s=i[o]||(i[o]={});(t.exports=function(t,e){return s[t]||(s[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(7423)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},8077:(t,e,r)=>{var n=r(4883),i=r(5266),o=r(1379)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||null==(r=n(s)[o])?e:i(r)}},5347:(t,e,r)=>{"use strict";var n=r(6099);t.exports=function(t,e){return!!t&&n((function(){e?t.call(null,(function(){}),1):t.call(null)}))}},8840:(t,e,r)=>{var n=r(9823),i=r(4821);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),h=n(r),u=a.length;return h<0||h>=u?t?"":void 0:(o=a.charCodeAt(h))<55296||o>56319||h+1===u||(s=a.charCodeAt(h+1))<56320||s>57343?t?a.charAt(h):o:t?a.slice(h,h+2):s-56320+(o-55296<<10)+65536}}},495:(t,e,r)=>{var n=r(2432),i=r(4821);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},1486:(t,e,r)=>{var n=r(3310),i=r(6099),o=r(4821),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,""")+'"'),a+">"+i+"</"+e+">"};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3})),"String",r)}},2011:(t,e,r)=>{var n=r(1721),i=r(2918),o=r(4821);t.exports=function(t,e,r,s){var a=String(o(t)),h=a.length,u=void 0===r?" ":String(r),c=n(e);if(c<=h||""==u)return a;var l=c-h,f=i.call(u,Math.ceil(l/u.length));return f.length>l&&(f=f.slice(0,l)),s?f+a:a+f}},2918:(t,e,r)=>{"use strict";var n=r(9823),i=r(4821);t.exports=function(t){var e=String(i(this)),r="",o=n(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(r+=e);return r}},6426:(t,e,r)=>{var n=r(3310),i=r(4821),o=r(6099),s=r(2420),a="["+s+"]",h=RegExp("^"+a+a+"*"),u=RegExp(a+a+"*$"),c=function(t,e,r){var i={},a=o((function(){return!!s[t]()||"
"!="
"[t]()})),h=i[t]=a?e(l):s[t];r&&(i[r]=h),n(n.P+n.F*a,"String",i)},l=c.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(h,"")),2&e&&(t=t.replace(u,"")),t};t.exports=c},2420:t=>{t.exports="\t\n\v\f\r \u2028\u2029\ufeff"},9788:(t,e,r)=>{var n,i,o,s=r(9756),a=r(6386),h=r(5696),u=r(5468),c=r(7626),l=c.process,f=c.setImmediate,p=c.clearImmediate,d=c.MessageChannel,y=c.Dispatch,g=0,m={},v=function(){var t=+this;if(m.hasOwnProperty(t)){var e=m[t];delete m[t],e()}},w=function(t){v.call(t.data)};f&&p||(f=function(t){for(var e=[],r=1;arguments.length>r;)e.push(arguments[r++]);return m[++g]=function(){a("function"==typeof t?t:Function(t),e)},n(g),g},p=function(t){delete m[t]},"process"==r(9641)(l)?n=function(t){l.nextTick(s(v,t,1))}:y&&y.now?n=function(t){y.now(s(v,t,1))}:d?(o=(i=new d).port2,i.port1.onmessage=w,n=s(o.postMessage,o,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(n=function(t){c.postMessage(t+"","*")},c.addEventListener("message",w,!1)):n="onreadystatechange"in u("script")?function(t){h.appendChild(u("script")).onreadystatechange=function(){h.removeChild(this),v.call(t)}}:function(t){setTimeout(s(v,t,1),0)}),t.exports={set:f,clear:p}},3693:(t,e,r)=>{var n=r(9823),i=Math.max,o=Math.min;t.exports=function(t,e){return(t=n(t))<0?i(t+e,0):o(t,e)}},9944:(t,e,r)=>{var n=r(9823),i=r(1721);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},9823:t=>{var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},7931:(t,e,r)=>{var n=r(8650),i=r(4821);t.exports=function(t){return n(i(t))}},1721:(t,e,r)=>{var n=r(9823),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},9542:(t,e,r)=>{var n=r(4821);t.exports=function(t){return Object(n(t))}},2851:(t,e,r)=>{var n=r(2962);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},7670:(t,e,r)=>{"use strict";if(r(4421)){var n=r(7423),i=r(7626),o=r(6099),s=r(3310),a=r(2204),h=r(9443),u=r(9756),c=r(9151),l=r(1519),f=r(342),p=r(9490),d=r(9823),y=r(1721),g=r(9944),m=r(3693),v=r(2851),w=r(3132),b=r(3753),M=r(2962),_=r(9542),x=r(8244),E=r(8765),S=r(4550),O=r(8918).f,T=r(172),I=r(3549),N=r(1379),P=r(4195),A=r(9699),C=r(8077),D=r(8759),k=r(568),L=r(3762),j=r(1955),F=r(6101),R=r(4248),G=r(3269),B=r(7765),U=G.f,q=B.f,z=i.RangeError,V=i.TypeError,W=i.Uint8Array,X="ArrayBuffer",$="SharedArrayBuffer",Y="BYTES_PER_ELEMENT",Q=Array.prototype,K=h.ArrayBuffer,H=h.DataView,J=P(0),Z=P(2),tt=P(3),et=P(4),rt=P(5),nt=P(6),it=A(!0),ot=A(!1),st=D.values,at=D.keys,ht=D.entries,ut=Q.lastIndexOf,ct=Q.reduce,lt=Q.reduceRight,ft=Q.join,pt=Q.sort,dt=Q.slice,yt=Q.toString,gt=Q.toLocaleString,mt=N("iterator"),vt=N("toStringTag"),wt=I("typed_constructor"),bt=I("def_constructor"),Mt=a.CONSTR,_t=a.TYPED,xt=a.VIEW,Et="Wrong length!",St=P(1,(function(t,e){return Pt(C(t,t[bt]),e)})),Ot=o((function(){return 1===new W(new Uint16Array([1]).buffer)[0]})),Tt=!!W&&!!W.prototype.set&&o((function(){new W(1).set({})})),It=function(t,e){var r=d(t);if(r<0||r%e)throw z("Wrong offset!");return r},Nt=function(t){if(M(t)&&_t in t)return t;throw V(t+" is not a typed array!")},Pt=function(t,e){if(!M(t)||!(wt in t))throw V("It is not a typed array constructor!");return new t(e)},At=function(t,e){return Ct(C(t,t[bt]),e)},Ct=function(t,e){for(var r=0,n=e.length,i=Pt(t,n);n>r;)i[r]=e[r++];return i},Dt=function(t,e,r){U(t,e,{get:function(){return this._d[r]}})},kt=function(t){var e,r,n,i,o,s,a=_(t),h=arguments.length,c=h>1?arguments[1]:void 0,l=void 0!==c,f=T(a);if(null!=f&&!x(f)){for(s=f.call(a),n=[],e=0;!(o=s.next()).done;e++)n.push(o.value);a=n}for(l&&h>2&&(c=u(c,arguments[2],2)),e=0,r=y(a.length),i=Pt(this,r);r>e;e++)i[e]=l?c(a[e],e):a[e];return i},Lt=function(){for(var t=0,e=arguments.length,r=Pt(this,e);e>t;)r[t]=arguments[t++];return r},jt=!!W&&o((function(){gt.call(new W(1))})),Ft=function(){return gt.apply(jt?dt.call(Nt(this)):Nt(this),arguments)},Rt={copyWithin:function(t,e){return R.call(Nt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return et(Nt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return F.apply(Nt(this),arguments)},filter:function(t){return At(this,Z(Nt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return rt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return nt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){J(Nt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return ot(Nt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return it(Nt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return ft.apply(Nt(this),arguments)},lastIndexOf:function(t){return ut.apply(Nt(this),arguments)},map:function(t){return St(Nt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ct.apply(Nt(this),arguments)},reduceRight:function(t){return lt.apply(Nt(this),arguments)},reverse:function(){for(var t,e=this,r=Nt(e).length,n=Math.floor(r/2),i=0;i<n;)t=e[i],e[i++]=e[--r],e[r]=t;return e},some:function(t){return tt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return pt.call(Nt(this),t)},subarray:function(t,e){var r=Nt(this),n=r.length,i=m(t,n);return new(C(r,r[bt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,y((void 0===e?n:m(e,n))-i))}},Gt=function(t,e){return At(this,dt.call(Nt(this),t,e))},Bt=function(t){Nt(this);var e=It(arguments[1],1),r=this.length,n=_(t),i=y(n.length),o=0;if(i+e>r)throw z(Et);for(;o<i;)this[e+o]=n[o++]},Ut={entries:function(){return ht.call(Nt(this))},keys:function(){return at.call(Nt(this))},values:function(){return st.call(Nt(this))}},qt=function(t,e){return M(t)&&t[_t]&&"symbol"!=typeof e&&e in t&&String(+e)==String(e)},zt=function(t,e){return qt(t,e=v(e,!0))?l(2,t[e]):q(t,e)},Vt=function(t,e,r){return!(qt(t,e=v(e,!0))&&M(r)&&w(r,"value"))||w(r,"get")||w(r,"set")||r.configurable||w(r,"writable")&&!r.writable||w(r,"enumerable")&&!r.enumerable?U(t,e,r):(t[e]=r.value,t)};Mt||(B.f=zt,G.f=Vt),s(s.S+s.F*!Mt,"Object",{getOwnPropertyDescriptor:zt,defineProperty:Vt}),o((function(){yt.call({})}))&&(yt=gt=function(){return ft.call(this)});var Wt=p({},Rt);p(Wt,Ut),f(Wt,mt,Ut.values),p(Wt,{slice:Gt,set:Bt,constructor:function(){},toString:yt,toLocaleString:Ft}),Dt(Wt,"buffer","b"),Dt(Wt,"byteOffset","o"),Dt(Wt,"byteLength","l"),Dt(Wt,"length","e"),U(Wt,vt,{get:function(){return this[_t]}}),t.exports=function(t,e,r,h){var u=t+((h=!!h)?"Clamped":"")+"Array",l="get"+t,p="set"+t,d=i[u],m=d||{},v=d&&S(d),w=!d||!a.ABV,_={},x=d&&d.prototype,T=function(t,r){U(t,r,{get:function(){return function(t,r){var n=t._d;return n.v[l](r*e+n.o,Ot)}(this,r)},set:function(t){return function(t,r,n){var i=t._d;h&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[p](r*e+i.o,n,Ot)}(this,r,t)},enumerable:!0})};w?(d=r((function(t,r,n,i){c(t,d,u,"_d");var o,s,a,h,l=0,p=0;if(M(r)){if(!(r instanceof K||(h=b(r))==X||h==$))return _t in r?Ct(d,r):kt.call(d,r);o=r,p=It(n,e);var m=r.byteLength;if(void 0===i){if(m%e)throw z(Et);if((s=m-p)<0)throw z(Et)}else if((s=y(i)*e)+p>m)throw z(Et);a=s/e}else a=g(r),o=new K(s=a*e);for(f(t,"_d",{b:o,o:p,l:s,e:a,v:new H(o)});l<a;)T(t,l++)})),x=d.prototype=E(Wt),f(x,"constructor",d)):o((function(){d(1)}))&&o((function(){new d(-1)}))&&L((function(t){new d,new d(null),new d(1.5),new d(t)}),!0)||(d=r((function(t,r,n,i){var o;return c(t,d,u),M(r)?r instanceof K||(o=b(r))==X||o==$?void 0!==i?new m(r,It(n,e),i):void 0!==n?new m(r,It(n,e)):new m(r):_t in r?Ct(d,r):kt.call(d,r):new m(g(r))})),J(v!==Function.prototype?O(m).concat(O(v)):O(m),(function(t){t in d||f(d,t,m[t])})),d.prototype=x,n||(x.constructor=d));var I=x[mt],N=!!I&&("values"==I.name||null==I.name),P=Ut.values;f(d,wt,!0),f(x,_t,u),f(x,xt,!0),f(x,bt,d),(h?new d(1)[vt]==u:vt in x)||U(x,vt,{get:function(){return u}}),_[u]=d,s(s.G+s.W+s.F*(d!=m),_),s(s.S,u,{BYTES_PER_ELEMENT:e}),s(s.S+s.F*o((function(){m.of.call(d,1)})),u,{from:kt,of:Lt}),Y in x||f(x,Y,e),s(s.P,u,Rt),j(u),s(s.P+s.F*Tt,u,{set:Bt}),s(s.P+s.F*!N,u,Ut),n||x.toString==yt||(x.toString=yt),s(s.P+s.F*o((function(){new d(1).slice()})),u,{slice:Gt}),s(s.P+s.F*(o((function(){return[1,2].toLocaleString()!=new d([1,2]).toLocaleString()}))||!o((function(){x.toLocaleString.call([1,2])}))),u,{toLocaleString:Ft}),k[u]=N?I:P,n||N||f(x,mt,P)}}else t.exports=function(){}},9443:(t,e,r)=>{"use strict";var n=r(7626),i=r(4421),o=r(7423),s=r(2204),a=r(342),h=r(9490),u=r(6099),c=r(9151),l=r(9823),f=r(1721),p=r(9944),d=r(8918).f,y=r(3269).f,g=r(6101),m=r(889),v="ArrayBuffer",w="DataView",b="Wrong index!",M=n.ArrayBuffer,_=n.DataView,x=n.Math,E=n.RangeError,S=n.Infinity,O=M,T=x.abs,I=x.pow,N=x.floor,P=x.log,A=x.LN2,C="buffer",D="byteLength",k="byteOffset",L=i?"_b":C,j=i?"_l":D,F=i?"_o":k;function R(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,h=(1<<a)-1,u=h>>1,c=23===e?I(2,-24)-I(2,-77):0,l=0,f=t<0||0===t&&1/t<0?1:0;for((t=T(t))!=t||t===S?(i=t!=t?1:0,n=h):(n=N(P(t)/A),t*(o=I(2,-n))<1&&(n--,o*=2),(t+=n+u>=1?c/o:c*I(2,1-u))*o>=2&&(n++,o/=2),n+u>=h?(i=0,n=h):n+u>=1?(i=(t*o-1)*I(2,e),n+=u):(i=t*I(2,u-1)*I(2,e),n=0));e>=8;s[l++]=255&i,i/=256,e-=8);for(n=n<<e|i,a+=e;a>0;s[l++]=255&n,n/=256,a-=8);return s[--l]|=128*f,s}function G(t,e,r){var n,i=8*r-e-1,o=(1<<i)-1,s=o>>1,a=i-7,h=r-1,u=t[h--],c=127&u;for(u>>=7;a>0;c=256*c+t[h],h--,a-=8);for(n=c&(1<<-a)-1,c>>=-a,a+=e;a>0;n=256*n+t[h],h--,a-=8);if(0===c)c=1-s;else{if(c===o)return n?NaN:u?-S:S;n+=I(2,e),c-=s}return(u?-1:1)*n*I(2,c-e)}function B(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function U(t){return[255&t]}function q(t){return[255&t,t>>8&255]}function z(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function V(t){return R(t,52,8)}function W(t){return R(t,23,4)}function X(t,e,r){y(t.prototype,e,{get:function(){return this[r]}})}function $(t,e,r,n){var i=p(+r);if(i+e>t[j])throw E(b);var o=t[L]._b,s=i+t[F],a=o.slice(s,s+e);return n?a:a.reverse()}function Y(t,e,r,n,i,o){var s=p(+r);if(s+e>t[j])throw E(b);for(var a=t[L]._b,h=s+t[F],u=n(+i),c=0;c<e;c++)a[h+c]=u[o?c:e-c-1]}if(s.ABV){if(!u((function(){M(1)}))||!u((function(){new M(-1)}))||u((function(){return new M,new M(1.5),new M(NaN),M.name!=v}))){for(var Q,K=(M=function(t){return c(this,M),new O(p(t))}).prototype=O.prototype,H=d(O),J=0;H.length>J;)(Q=H[J++])in M||a(M,Q,O[Q]);o||(K.constructor=M)}var Z=new _(new M(2)),tt=_.prototype.setInt8;Z.setInt8(0,2147483648),Z.setInt8(1,2147483649),!Z.getInt8(0)&&Z.getInt8(1)||h(_.prototype,{setInt8:function(t,e){tt.call(this,t,e<<24>>24)},setUint8:function(t,e){tt.call(this,t,e<<24>>24)}},!0)}else M=function(t){c(this,M,v);var e=p(t);this._b=g.call(new Array(e),0),this[j]=e},_=function(t,e,r){c(this,_,w),c(t,M,w);var n=t[j],i=l(e);if(i<0||i>n)throw E("Wrong offset!");if(i+(r=void 0===r?n-i:f(r))>n)throw E("Wrong length!");this[L]=t,this[F]=i,this[j]=r},i&&(X(M,D,"_l"),X(_,C,"_b"),X(_,D,"_l"),X(_,k,"_o")),h(_.prototype,{getInt8:function(t){return $(this,1,t)[0]<<24>>24},getUint8:function(t){return $(this,1,t)[0]},getInt16:function(t){var e=$(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=$(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return B($(this,4,t,arguments[1]))},getUint32:function(t){return B($(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return G($(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return G($(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){Y(this,1,t,U,e)},setUint8:function(t,e){Y(this,1,t,U,e)},setInt16:function(t,e){Y(this,2,t,q,e,arguments[2])},setUint16:function(t,e){Y(this,2,t,q,e,arguments[2])},setInt32:function(t,e){Y(this,4,t,z,e,arguments[2])},setUint32:function(t,e){Y(this,4,t,z,e,arguments[2])},setFloat32:function(t,e){Y(this,4,t,W,e,arguments[2])},setFloat64:function(t,e){Y(this,8,t,V,e,arguments[2])}});m(M,v),m(_,w),a(_.prototype,s.VIEW,!0),e.ArrayBuffer=M,e.DataView=_},2204:(t,e,r)=>{for(var n,i=r(7626),o=r(342),s=r(3549),a=s("typed_array"),h=s("view"),u=!(!i.ArrayBuffer||!i.DataView),c=u,l=0,f="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(n=i[f[l++]])?(o(n.prototype,a,!0),o(n.prototype,h,!0)):c=!1;t.exports={ABV:u,CONSTR:c,TYPED:a,VIEW:h}},3549:t=>{var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},8452:(t,e,r)=>{var n=r(7626).navigator;t.exports=n&&n.userAgent||""},4136:(t,e,r)=>{var n=r(2962);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},9729:(t,e,r)=>{var n=r(7626),i=r(5042),o=r(7423),s=r(6075),a=r(3269).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},6075:(t,e,r)=>{e.f=r(1379)},1379:(t,e,r)=>{var n=r(6948)("wks"),i=r(3549),o=r(7626).Symbol,s="function"==typeof o;(t.exports=function(t){return n[t]||(n[t]=s&&o[t]||(s?o:i)("Symbol."+t))}).store=n},172:(t,e,r)=>{var n=r(3753),i=r(1379)("iterator"),o=r(568);t.exports=r(5042).getIteratorMethod=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[n(t)]}},6581:(t,e,r)=>{var n=r(3310),i=r(8360)(/[\\^$*+?.()|[\]{}]/g,"\\$&");n(n.S,"RegExp",{escape:function(t){return i(t)}})},6666:(t,e,r)=>{var n=r(3310);n(n.P,"Array",{copyWithin:r(4248)}),r(9854)("copyWithin")},9461:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(4);n(n.P+n.F*!r(5347)([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},8400:(t,e,r)=>{var n=r(3310);n(n.P,"Array",{fill:r(6101)}),r(9854)("fill")},6257:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(2);n(n.P+n.F*!r(5347)([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},7456:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(6),o="findIndex",s=!0;o in[]&&Array(1)[o]((function(){s=!1})),n(n.P+n.F*s,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(9854)(o)},9027:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(5),o="find",s=!0;o in[]&&Array(1).find((function(){s=!1})),n(n.P+n.F*s,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(9854)(o)},6897:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(0),o=r(5347)([].forEach,!0);n(n.P+n.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},6636:(t,e,r)=>{"use strict";var n=r(9756),i=r(3310),o=r(9542),s=r(7418),a=r(8244),h=r(1721),u=r(7492),c=r(172);i(i.S+i.F*!r(3762)((function(t){Array.from(t)})),"Array",{from:function(t){var e,r,i,l,f=o(t),p="function"==typeof this?this:Array,d=arguments.length,y=d>1?arguments[1]:void 0,g=void 0!==y,m=0,v=c(f);if(g&&(y=n(y,d>2?arguments[2]:void 0,2)),null==v||p==Array&&a(v))for(r=new p(e=h(f.length));e>m;m++)u(r,m,g?y(f[m],m):f[m]);else for(l=v.call(f),r=new p;!(i=l.next()).done;m++)u(r,m,g?s(l,y,[i.value,m],!0):i.value);return r.length=m,r}})},6978:(t,e,r)=>{"use strict";var n=r(3310),i=r(9699)(!1),o=[].indexOf,s=!!o&&1/[1].indexOf(1,-0)<0;n(n.P+n.F*(s||!r(5347)(o)),"Array",{indexOf:function(t){return s?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},7391:(t,e,r)=>{var n=r(3310);n(n.S,"Array",{isArray:r(5159)})},8759:(t,e,r)=>{"use strict";var n=r(9854),i=r(2612),o=r(568),s=r(7931);t.exports=r(2711)(Array,"Array",(function(t,e){this._t=s(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])}),"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},1250:(t,e,r)=>{"use strict";var n=r(3310),i=r(7931),o=[].join;n(n.P+n.F*(r(8650)!=Object||!r(5347)(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},1285:(t,e,r)=>{"use strict";var n=r(3310),i=r(7931),o=r(9823),s=r(1721),a=[].lastIndexOf,h=!!a&&1/[1].lastIndexOf(1,-0)<0;n(n.P+n.F*(h||!r(5347)(a)),"Array",{lastIndexOf:function(t){if(h)return a.apply(this,arguments)||0;var e=i(this),r=s(e.length),n=r-1;for(arguments.length>1&&(n=Math.min(n,o(arguments[1]))),n<0&&(n=r+n);n>=0;n--)if(n in e&&e[n]===t)return n||0;return-1}})},1982:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(1);n(n.P+n.F*!r(5347)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},4494:(t,e,r)=>{"use strict";var n=r(3310),i=r(7492);n(n.S+n.F*r(6099)((function(){function t(){}return!(Array.of.call(t)instanceof t)})),"Array",{of:function(){for(var t=0,e=arguments.length,r=new("function"==typeof this?this:Array)(e);e>t;)i(r,t,arguments[t++]);return r.length=e,r}})},3022:(t,e,r)=>{"use strict";var n=r(3310),i=r(3780);n(n.P+n.F*!r(5347)([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},9359:(t,e,r)=>{"use strict";var n=r(3310),i=r(3780);n(n.P+n.F*!r(5347)([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},644:(t,e,r)=>{"use strict";var n=r(3310),i=r(5696),o=r(9641),s=r(3693),a=r(1721),h=[].slice;n(n.P+n.F*r(6099)((function(){i&&h.call(i)})),"Array",{slice:function(t,e){var r=a(this.length),n=o(this);if(e=void 0===e?r:e,"Array"==n)return h.call(this,t,e);for(var i=s(t,r),u=s(e,r),c=a(u-i),l=new Array(c),f=0;f<c;f++)l[f]="String"==n?this.charAt(i+f):this[i+f];return l}})},5472:(t,e,r)=>{"use strict";var n=r(3310),i=r(4195)(3);n(n.P+n.F*!r(5347)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},6076:(t,e,r)=>{"use strict";var n=r(3310),i=r(5266),o=r(9542),s=r(6099),a=[].sort,h=[1,2,3];n(n.P+n.F*(s((function(){h.sort(void 0)}))||!s((function(){h.sort(null)}))||!r(5347)(a)),"Array",{sort:function(t){return void 0===t?a.call(o(this)):a.call(o(this),i(t))}})},9661:(t,e,r)=>{r(1955)("Array")},2461:(t,e,r)=>{var n=r(3310);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},857:(t,e,r)=>{var n=r(3310),i=r(1686);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},9016:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(2851);n(n.P+n.F*r(6099)((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(t){var e=i(this),r=o(e);return"number"!=typeof r||isFinite(r)?e.toISOString():null}})},4023:(t,e,r)=>{var n=r(1379)("toPrimitive"),i=Date.prototype;n in i||r(342)(i,n,r(3603))},8396:(t,e,r)=>{var n=Date.prototype,i="Invalid Date",o=n.toString,s=n.getTime;new Date(NaN)+""!=i&&r(3682)(n,"toString",(function(){var t=s.call(this);return t==t?o.call(this):i}))},8884:(t,e,r)=>{var n=r(3310);n(n.P,"Function",{bind:r(7591)})},814:(t,e,r)=>{"use strict";var n=r(2962),i=r(4550),o=r(1379)("hasInstance"),s=Function.prototype;o in s||r(3269).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},7910:(t,e,r)=>{var n=r(3269).f,i=Function.prototype,o=/^\s*function ([^ (]*)/,s="name";s in i||r(4421)&&n(i,s,{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},8780:(t,e,r)=>{"use strict";var n=r(9888),i=r(4136),o="Map";t.exports=r(6909)(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{get:function(t){var e=n.getEntry(i(this,o),t);return e&&e.v},set:function(t,e){return n.def(i(this,o),0===t?0:t,e)}},n,!0)},8583:(t,e,r)=>{var n=r(3310),i=r(3526),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},4587:(t,e,r)=>{var n=r(3310),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}})},7165:(t,e,r)=>{var n=r(3310),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},6875:(t,e,r)=>{var n=r(3310),i=r(6993);n(n.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},4259:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},1133:(t,e,r)=>{var n=r(3310),i=Math.exp;n(n.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},6516:(t,e,r)=>{var n=r(3310),i=r(4993);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},1524:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{fround:r(7368)})},2056:(t,e,r)=>{var n=r(3310),i=Math.abs;n(n.S,"Math",{hypot:function(t,e){for(var r,n,o=0,s=0,a=arguments.length,h=0;s<a;)h<(r=i(arguments[s++]))?(o=o*(n=h/r)*n+1,h=r):o+=r>0?(n=r/h)*n:r;return h===1/0?1/0:h*Math.sqrt(o)}})},5732:(t,e,r)=>{var n=r(3310),i=Math.imul;n(n.S+n.F*r(6099)((function(){return-5!=i(4294967295,5)||2!=i.length})),"Math",{imul:function(t,e){var r=65535,n=+t,i=+e,o=r&n,s=r&i;return 0|o*s+((r&n>>>16)*s+o*(r&i>>>16)<<16>>>0)}})},811:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},2172:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{log1p:r(3526)})},8921:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},6798:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{sign:r(6993)})},2438:(t,e,r)=>{var n=r(3310),i=r(4993),o=Math.exp;n(n.S+n.F*r(6099)((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},1322:(t,e,r)=>{var n=r(3310),i=r(4993),o=Math.exp;n(n.S,"Math",{tanh:function(t){var e=i(t=+t),r=i(-t);return e==1/0?1:r==1/0?-1:(e-r)/(o(t)+o(-t))}})},429:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},7164:(t,e,r)=>{"use strict";var n=r(7626),i=r(3132),o=r(9641),s=r(7432),a=r(2851),h=r(6099),u=r(8918).f,c=r(7765).f,l=r(3269).f,f=r(6426).trim,p="Number",d=n.Number,y=d,g=d.prototype,m=o(r(8765)(g))==p,v="trim"in String.prototype,w=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=v?e.trim():f(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,h=e.slice(2),u=0,c=h.length;u<c;u++)if((s=h.charCodeAt(u))<48||s>i)return NaN;return parseInt(h,n)}}return+e};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(t){var e=arguments.length<1?0:t,r=this;return r instanceof d&&(m?h((function(){g.valueOf.call(r)})):o(r)!=p)?s(new y(w(e)),r,d):w(e)};for(var b,M=r(4421)?u(y):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),_=0;M.length>_;_++)i(y,b=M[_])&&!i(d,b)&&l(d,b,c(y,b));d.prototype=g,g.constructor=d,r(3682)(n,p,d)}},9803:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},3596:(t,e,r)=>{var n=r(3310),i=r(7626).isFinite;n(n.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},3519:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{isInteger:r(4697)})},708:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{isNaN:function(t){return t!=t}})},6899:(t,e,r)=>{var n=r(3310),i=r(4697),o=Math.abs;n(n.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},8172:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},6313:(t,e,r)=>{var n=r(3310);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},7782:(t,e,r)=>{var n=r(3310),i=r(4060);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},3419:(t,e,r)=>{var n=r(3310),i=r(9362);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},5669:(t,e,r)=>{"use strict";var n=r(3310),i=r(9823),o=r(437),s=r(2918),a=1..toFixed,h=Math.floor,u=[0,0,0,0,0,0],c="Number.toFixed: incorrect invocation!",l="0",f=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*u[r],u[r]=n%1e7,n=h(n/1e7)},p=function(t){for(var e=6,r=0;--e>=0;)r+=u[e],u[e]=h(r/t),r=r%t*1e7},d=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==u[t]){var r=String(u[t]);e=""===e?r:e+s.call(l,7-r.length)+r}return e},y=function(t,e,r){return 0===e?r:e%2==1?y(t,e-1,r*t):y(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(6099)((function(){a.call({})}))),"Number",{toFixed:function(t){var e,r,n,a,h=o(this,c),u=i(t),g="",m=l;if(u<0||u>20)throw RangeError(c);if(h!=h)return"NaN";if(h<=-1e21||h>=1e21)return String(h);if(h<0&&(g="-",h=-h),h>1e-21)if(r=(e=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(h*y(2,69,1))-69)<0?h*y(2,-e,1):h/y(2,e,1),r*=4503599627370496,(e=52-e)>0){for(f(0,r),n=u;n>=7;)f(1e7,0),n-=7;for(f(y(10,n,1),0),n=e-1;n>=23;)p(1<<23),n-=23;p(1<<n),f(1,1),p(2),m=d()}else f(0,r),f(1<<-e,0),m=d()+s.call(l,u);return u>0?g+((a=m.length)<=u?"0."+s.call(l,u-a)+m:m.slice(0,a-u)+"."+m.slice(a-u)):g+m}})},3883:(t,e,r)=>{"use strict";var n=r(3310),i=r(6099),o=r(437),s=1..toPrecision;n(n.P+n.F*(i((function(){return"1"!==s.call(1,void 0)}))||!i((function(){s.call({})}))),"Number",{toPrecision:function(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?s.call(e):s.call(e,t)}})},3033:(t,e,r)=>{var n=r(3310);n(n.S+n.F,"Object",{assign:r(8874)})},663:(t,e,r)=>{var n=r(3310);n(n.S,"Object",{create:r(8765)})},1475:(t,e,r)=>{var n=r(3310);n(n.S+n.F*!r(4421),"Object",{defineProperties:r(9504)})},6133:(t,e,r)=>{var n=r(3310);n(n.S+n.F*!r(4421),"Object",{defineProperty:r(3269).f})},3750:(t,e,r)=>{var n=r(2962),i=r(5687).onFreeze;r(4955)("freeze",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},8534:(t,e,r)=>{var n=r(7931),i=r(7765).f;r(4955)("getOwnPropertyDescriptor",(function(){return function(t,e){return i(n(t),e)}}))},5081:(t,e,r)=>{r(4955)("getOwnPropertyNames",(function(){return r(7831).f}))},641:(t,e,r)=>{var n=r(9542),i=r(4550);r(4955)("getPrototypeOf",(function(){return function(t){return i(n(t))}}))},5997:(t,e,r)=>{var n=r(2962);r(4955)("isExtensible",(function(t){return function(e){return!!n(e)&&(!t||t(e))}}))},402:(t,e,r)=>{var n=r(2962);r(4955)("isFrozen",(function(t){return function(e){return!n(e)||!!t&&t(e)}}))},848:(t,e,r)=>{var n=r(2962);r(4955)("isSealed",(function(t){return function(e){return!n(e)||!!t&&t(e)}}))},2213:(t,e,r)=>{var n=r(3310);n(n.S,"Object",{is:r(3244)})},7293:(t,e,r)=>{var n=r(9542),i=r(5304);r(4955)("keys",(function(){return function(t){return i(n(t))}}))},5556:(t,e,r)=>{var n=r(2962),i=r(5687).onFreeze;r(4955)("preventExtensions",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},5524:(t,e,r)=>{var n=r(2962),i=r(5687).onFreeze;r(4955)("seal",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},9248:(t,e,r)=>{var n=r(3310);n(n.S,"Object",{setPrototypeOf:r(9298).set})},215:(t,e,r)=>{"use strict";var n=r(3753),i={};i[r(1379)("toStringTag")]="z",i+""!="[object z]"&&r(3682)(Object.prototype,"toString",(function(){return"[object "+n(this)+"]"}),!0)},202:(t,e,r)=>{var n=r(3310),i=r(4060);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},7990:(t,e,r)=>{var n=r(3310),i=r(9362);n(n.G+n.F*(parseInt!=i),{parseInt:i})},6984:(t,e,r)=>{"use strict";var n,i,o,s,a=r(7423),h=r(7626),u=r(9756),c=r(3753),l=r(3310),f=r(2962),p=r(5266),d=r(9151),y=r(8372),g=r(8077),m=r(9788).set,v=r(48)(),w=r(2690),b=r(5222),M=r(8452),_=r(649),x="Promise",E=h.TypeError,S=h.process,O=S&&S.versions,T=O&&O.v8||"",I=h.Promise,N="process"==c(S),P=function(){},A=i=w.f,C=!!function(){try{var t=I.resolve(1),e=(t.constructor={})[r(1379)("species")]=function(t){t(P,P)};return(N||"function"==typeof PromiseRejectionEvent)&&t.then(P)instanceof e&&0!==T.indexOf("6.6")&&-1===M.indexOf("Chrome/66")}catch(t){}}(),D=function(t){var e;return!(!f(t)||"function"!=typeof(e=t.then))&&e},k=function(t,e){if(!t._n){t._n=!0;var r=t._c;v((function(){for(var n=t._v,i=1==t._s,o=0,s=function(e){var r,o,s,a=i?e.ok:e.fail,h=e.resolve,u=e.reject,c=e.domain;try{a?(i||(2==t._h&&F(t),t._h=1),!0===a?r=n:(c&&c.enter(),r=a(n),c&&(c.exit(),s=!0)),r===e.promise?u(E("Promise-chain cycle")):(o=D(r))?o.call(r,h,u):h(r)):u(n)}catch(t){c&&!s&&c.exit(),u(t)}};r.length>o;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&L(t)}))}},L=function(t){m.call(h,(function(){var e,r,n,i=t._v,o=j(t);if(o&&(e=b((function(){N?S.emit("unhandledRejection",i,t):(r=h.onunhandledrejection)?r({promise:t,reason:i}):(n=h.console)&&n.error&&n.error("Unhandled promise rejection",i)})),t._h=N||j(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},j=function(t){return 1!==t._h&&0===(t._a||t._c).length},F=function(t){m.call(h,(function(){var e;N?S.emit("rejectionHandled",t):(e=h.onrejectionhandled)&&e({promise:t,reason:t._v})}))},R=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),k(e,!0))},G=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw E("Promise can't be resolved itself");(e=D(t))?v((function(){var n={_w:r,_d:!1};try{e.call(t,u(G,n,1),u(R,n,1))}catch(t){R.call(n,t)}})):(r._v=t,r._s=1,k(r,!1))}catch(t){R.call({_w:r,_d:!1},t)}}};C||(I=function(t){d(this,I,x,"_h"),p(t),n.call(this);try{t(u(G,this,1),u(R,this,1))}catch(t){R.call(this,t)}},(n=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(9490)(I.prototype,{then:function(t,e){var r=A(g(this,I));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=N?S.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&k(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=u(G,t,1),this.reject=u(R,t,1)},w.f=A=function(t){return t===I||t===s?new o(t):i(t)}),l(l.G+l.W+l.F*!C,{Promise:I}),r(889)(I,x),r(1955)(x),s=r(5042).Promise,l(l.S+l.F*!C,x,{reject:function(t){var e=A(this);return(0,e.reject)(t),e.promise}}),l(l.S+l.F*(a||!C),x,{resolve:function(t){return _(a&&this===s?I:this,t)}}),l(l.S+l.F*!(C&&r(3762)((function(t){I.all(t).catch(P)}))),x,{all:function(t){var e=this,r=A(e),n=r.resolve,i=r.reject,o=b((function(){var r=[],o=0,s=1;y(t,!1,(function(t){var a=o++,h=!1;r.push(void 0),s++,e.resolve(t).then((function(t){h||(h=!0,r[a]=t,--s||n(r))}),i)})),--s||n(r)}));return o.e&&i(o.v),r.promise},race:function(t){var e=this,r=A(e),n=r.reject,i=b((function(){y(t,!1,(function(t){e.resolve(t).then(r.resolve,n)}))}));return i.e&&n(i.v),r.promise}})},9026:(t,e,r)=>{var n=r(3310),i=r(5266),o=r(4883),s=(r(7626).Reflect||{}).apply,a=Function.apply;n(n.S+n.F*!r(6099)((function(){s((function(){}))})),"Reflect",{apply:function(t,e,r){var n=i(t),h=o(r);return s?s(n,e,h):a.call(n,e,h)}})},2267:(t,e,r)=>{var n=r(3310),i=r(8765),o=r(5266),s=r(4883),a=r(2962),h=r(6099),u=r(7591),c=(r(7626).Reflect||{}).construct,l=h((function(){function t(){}return!(c((function(){}),[],t)instanceof t)})),f=!h((function(){c((function(){}))}));n(n.S+n.F*(l||f),"Reflect",{construct:function(t,e){o(t),s(e);var r=arguments.length<3?t:o(arguments[2]);if(f&&!l)return c(t,e,r);if(t==r){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(u.apply(t,n))}var h=r.prototype,p=i(a(h)?h:Object.prototype),d=Function.apply.call(t,p,e);return a(d)?d:p}})},4086:(t,e,r)=>{var n=r(3269),i=r(3310),o=r(4883),s=r(2851);i(i.S+i.F*r(6099)((function(){Reflect.defineProperty(n.f({},1,{value:1}),1,{value:2})})),"Reflect",{defineProperty:function(t,e,r){o(t),e=s(e,!0),o(r);try{return n.f(t,e,r),!0}catch(t){return!1}}})},106:(t,e,r)=>{var n=r(3310),i=r(7765).f,o=r(4883);n(n.S,"Reflect",{deleteProperty:function(t,e){var r=i(o(t),e);return!(r&&!r.configurable)&&delete t[e]}})},3533:(t,e,r)=>{"use strict";var n=r(3310),i=r(4883),o=function(t){this._t=i(t),this._i=0;var e,r=this._k=[];for(e in t)r.push(e)};r(1700)(o,"Object",(function(){var t,e=this,r=e._k;do{if(e._i>=r.length)return{value:void 0,done:!0}}while(!((t=r[e._i++])in e._t));return{value:t,done:!1}})),n(n.S,"Reflect",{enumerate:function(t){return new o(t)}})},9212:(t,e,r)=>{var n=r(7765),i=r(3310),o=r(4883);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return n.f(o(t),e)}})},2583:(t,e,r)=>{var n=r(3310),i=r(4550),o=r(4883);n(n.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},2134:(t,e,r)=>{var n=r(7765),i=r(4550),o=r(3132),s=r(3310),a=r(2962),h=r(4883);s(s.S,"Reflect",{get:function t(e,r){var s,u,c=arguments.length<3?e:arguments[2];return h(e)===c?e[r]:(s=n.f(e,r))?o(s,"value")?s.value:void 0!==s.get?s.get.call(c):void 0:a(u=i(e))?t(u,r,c):void 0}})},2877:(t,e,r)=>{var n=r(3310);n(n.S,"Reflect",{has:function(t,e){return e in t}})},9636:(t,e,r)=>{var n=r(3310),i=r(4883),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},2014:(t,e,r)=>{var n=r(3310);n(n.S,"Reflect",{ownKeys:r(1529)})},1194:(t,e,r)=>{var n=r(3310),i=r(4883),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},6221:(t,e,r)=>{var n=r(3310),i=r(9298);i&&n(n.S,"Reflect",{setPrototypeOf:function(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(t){return!1}}})},509:(t,e,r)=>{var n=r(3269),i=r(7765),o=r(4550),s=r(3132),a=r(3310),h=r(1519),u=r(4883),c=r(2962);a(a.S,"Reflect",{set:function t(e,r,a){var l,f,p=arguments.length<4?e:arguments[3],d=i.f(u(e),r);if(!d){if(c(f=o(e)))return t(f,r,a,p);d=h(0)}if(s(d,"value")){if(!1===d.writable||!c(p))return!1;if(l=i.f(p,r)){if(l.get||l.set||!1===l.writable)return!1;l.value=a,n.f(p,r,l)}else n.f(p,r,h(0,a));return!0}return void 0!==d.set&&(d.set.call(p,a),!0)}})},2678:(t,e,r)=>{var n=r(7626),i=r(7432),o=r(3269).f,s=r(8918).f,a=r(2432),h=r(6403),u=n.RegExp,c=u,l=u.prototype,f=/a/g,p=/a/g,d=new u(f)!==f;if(r(4421)&&(!d||r(6099)((function(){return p[r(1379)("match")]=!1,u(f)!=f||u(p)==p||"/a/i"!=u(f,"i")})))){u=function(t,e){var r=this instanceof u,n=a(t),o=void 0===e;return!r&&n&&t.constructor===u&&o?t:i(d?new c(n&&!o?t.source:t,e):c((n=t instanceof u)?t.source:t,n&&o?h.call(t):e),r?this:l,u)};for(var y=function(t){t in u||o(u,t,{configurable:!0,get:function(){return c[t]},set:function(e){c[t]=e}})},g=s(c),m=0;g.length>m;)y(g[m++]);l.constructor=u,u.prototype=l,r(3682)(n,"RegExp",u)}r(1955)("RegExp")},1196:(t,e,r)=>{"use strict";var n=r(942);r(3310)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},140:(t,e,r)=>{r(4421)&&"g"!=/./g.flags&&r(3269).f(RegExp.prototype,"flags",{configurable:!0,get:r(6403)})},1592:(t,e,r)=>{"use strict";var n=r(4883),i=r(1721),o=r(1703),s=r(7047);r(7627)("match",1,(function(t,e,r,a){return[function(r){var n=t(this),i=null==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=a(r,t,this);if(e.done)return e.value;var h=n(t),u=String(this);if(!h.global)return s(h,u);var c=h.unicode;h.lastIndex=0;for(var l,f=[],p=0;null!==(l=s(h,u));){var d=String(l[0]);f[p]=d,""===d&&(h.lastIndex=o(u,i(h.lastIndex),c)),p++}return 0===p?null:f}]}))},70:(t,e,r)=>{"use strict";var n=r(4883),i=r(9542),o=r(1721),s=r(9823),a=r(1703),h=r(7047),u=Math.max,c=Math.min,l=Math.floor,f=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;r(7627)("replace",2,(function(t,e,r,d){return[function(n,i){var o=t(this),s=null==n?void 0:n[e];return void 0!==s?s.call(n,o,i):r.call(String(o),n,i)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var l=n(t),f=String(this),p="function"==typeof e;p||(e=String(e));var g=l.global;if(g){var m=l.unicode;l.lastIndex=0}for(var v=[];;){var w=h(l,f);if(null===w)break;if(v.push(w),!g)break;""===String(w[0])&&(l.lastIndex=a(f,o(l.lastIndex),m))}for(var b,M="",_=0,x=0;x<v.length;x++){w=v[x];for(var E=String(w[0]),S=u(c(s(w.index),f.length),0),O=[],T=1;T<w.length;T++)O.push(void 0===(b=w[T])?b:String(b));var I=w.groups;if(p){var N=[E].concat(O,S,f);void 0!==I&&N.push(I);var P=String(e.apply(void 0,N))}else P=y(E,f,S,O,I,e);S>=_&&(M+=f.slice(_,S)+P,_=S+E.length)}return M+f.slice(_)}];function y(t,e,n,o,s,a){var h=n+t.length,u=o.length,c=p;return void 0!==s&&(s=i(s),c=f),r.call(a,c,(function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(h);case"<":a=s[i.slice(1,-1)];break;default:var c=+i;if(0===c)return r;if(c>u){var f=l(c/10);return 0===f?r:f<=u?void 0===o[f-1]?i.charAt(1):o[f-1]+i.charAt(1):r}a=o[c-1]}return void 0===a?"":a}))}}))},1758:(t,e,r)=>{"use strict";var n=r(4883),i=r(3244),o=r(7047);r(7627)("search",1,(function(t,e,r,s){return[function(r){var n=t(this),i=null==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),h=String(this),u=a.lastIndex;i(u,0)||(a.lastIndex=0);var c=o(a,h);return i(a.lastIndex,u)||(a.lastIndex=u),null===c?-1:c.index}]}))},4503:(t,e,r)=>{"use strict";var n=r(2432),i=r(4883),o=r(8077),s=r(1703),a=r(1721),h=r(7047),u=r(942),c=r(6099),l=Math.min,f=[].push,p=4294967295,d=!c((function(){RegExp(p,"y")}));r(7627)("split",2,(function(t,e,r,c){var y;return y="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,h=[],c=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,d=void 0===e?p:e>>>0,y=new RegExp(t.source,c+"g");(o=u.call(y,i))&&!((s=y.lastIndex)>l&&(h.push(i.slice(l,o.index)),o.length>1&&o.index<i.length&&f.apply(h,o.slice(1)),a=o[0].length,l=s,h.length>=d));)y.lastIndex===o.index&&y.lastIndex++;return l===i.length?!a&&y.test("")||h.push(""):h.push(i.slice(l)),h.length>d?h.slice(0,d):h}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function(r,n){var i=t(this),o=null==r?void 0:r[e];return void 0!==o?o.call(r,i,n):y.call(String(i),r,n)},function(t,e){var n=c(y,t,this,e,y!==r);if(n.done)return n.value;var u=i(t),f=String(this),g=o(u,RegExp),m=u.unicode,v=(u.ignoreCase?"i":"")+(u.multiline?"m":"")+(u.unicode?"u":"")+(d?"y":"g"),w=new g(d?u:"^(?:"+u.source+")",v),b=void 0===e?p:e>>>0;if(0===b)return[];if(0===f.length)return null===h(w,f)?[f]:[];for(var M=0,_=0,x=[];_<f.length;){w.lastIndex=d?_:0;var E,S=h(w,d?f:f.slice(_));if(null===S||(E=l(a(w.lastIndex+(d?0:_)),f.length))===M)_=s(f,_,m);else{if(x.push(f.slice(M,_)),x.length===b)return x;for(var O=1;O<=S.length-1;O++)if(x.push(S[O]),x.length===b)return x;_=M=E}}return x.push(f.slice(M)),x}]}))},7950:(t,e,r)=>{"use strict";r(140);var n=r(4883),i=r(6403),o=r(4421),s="toString",a=/./.toString,h=function(t){r(3682)(RegExp.prototype,s,t,!0)};r(6099)((function(){return"/a/b"!=a.call({source:"a",flags:"b"})}))?h((function(){var t=n(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)})):a.name!=s&&h((function(){return a.call(this)}))},5871:(t,e,r)=>{"use strict";var n=r(9888),i=r(4136);t.exports=r(6909)("Set",(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return n.def(i(this,"Set"),t=0===t?0:t,t)}},n)},9071:(t,e,r)=>{"use strict";r(1486)("anchor",(function(t){return function(e){return t(this,"a","name",e)}}))},7836:(t,e,r)=>{"use strict";r(1486)("big",(function(t){return function(){return t(this,"big","","")}}))},9259:(t,e,r)=>{"use strict";r(1486)("blink",(function(t){return function(){return t(this,"blink","","")}}))},3133:(t,e,r)=>{"use strict";r(1486)("bold",(function(t){return function(){return t(this,"b","","")}}))},9435:(t,e,r)=>{"use strict";var n=r(3310),i=r(8840)(!1);n(n.P,"String",{codePointAt:function(t){return i(this,t)}})},7011:(t,e,r)=>{"use strict";var n=r(3310),i=r(1721),o=r(495),s="endsWith",a="".endsWith;n(n.P+n.F*r(9569)(s),"String",{endsWith:function(t){var e=o(this,t,s),r=arguments.length>1?arguments[1]:void 0,n=i(e.length),h=void 0===r?n:Math.min(i(r),n),u=String(t);return a?a.call(e,u,h):e.slice(h-u.length,h)===u}})},9462:(t,e,r)=>{"use strict";r(1486)("fixed",(function(t){return function(){return t(this,"tt","","")}}))},7443:(t,e,r)=>{"use strict";r(1486)("fontcolor",(function(t){return function(e){return t(this,"font","color",e)}}))},7279:(t,e,r)=>{"use strict";r(1486)("fontsize",(function(t){return function(e){return t(this,"font","size",e)}}))},1479:(t,e,r)=>{var n=r(3310),i=r(3693),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function(t){for(var e,r=[],n=arguments.length,s=0;n>s;){if(e=+arguments[s++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");r.push(e<65536?o(e):o(55296+((e-=65536)>>10),e%1024+56320))}return r.join("")}})},5554:(t,e,r)=>{"use strict";var n=r(3310),i=r(495),o="includes";n(n.P+n.F*r(9569)(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},4715:(t,e,r)=>{"use strict";r(1486)("italics",(function(t){return function(){return t(this,"i","","")}}))},5995:(t,e,r)=>{"use strict";var n=r(8840)(!0);r(2711)(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,r=this._i;return r>=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})}))},1482:(t,e,r)=>{"use strict";r(1486)("link",(function(t){return function(e){return t(this,"a","href",e)}}))},7702:(t,e,r)=>{var n=r(3310),i=r(7931),o=r(1721);n(n.S,"String",{raw:function(t){for(var e=i(t.raw),r=o(e.length),n=arguments.length,s=[],a=0;r>a;)s.push(String(e[a++])),a<n&&s.push(String(arguments[a]));return s.join("")}})},7619:(t,e,r)=>{var n=r(3310);n(n.P,"String",{repeat:r(2918)})},8742:(t,e,r)=>{"use strict";r(1486)("small",(function(t){return function(){return t(this,"small","","")}}))},6585:(t,e,r)=>{"use strict";var n=r(3310),i=r(1721),o=r(495),s="startsWith",a="".startsWith;n(n.P+n.F*r(9569)(s),"String",{startsWith:function(t){var e=o(this,t,s),r=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),n=String(t);return a?a.call(e,n,r):e.slice(r,r+n.length)===n}})},220:(t,e,r)=>{"use strict";r(1486)("strike",(function(t){return function(){return t(this,"strike","","")}}))},7349:(t,e,r)=>{"use strict";r(1486)("sub",(function(t){return function(){return t(this,"sub","","")}}))},5852:(t,e,r)=>{"use strict";r(1486)("sup",(function(t){return function(){return t(this,"sup","","")}}))},7592:(t,e,r)=>{"use strict";r(6426)("trim",(function(t){return function(){return t(this,3)}}))},5968:(t,e,r)=>{"use strict";var n=r(7626),i=r(3132),o=r(4421),s=r(3310),a=r(3682),h=r(5687).KEY,u=r(6099),c=r(6948),l=r(889),f=r(3549),p=r(1379),d=r(6075),y=r(9729),g=r(989),m=r(5159),v=r(4883),w=r(2962),b=r(9542),M=r(7931),_=r(2851),x=r(1519),E=r(8765),S=r(7831),O=r(7765),T=r(4365),I=r(3269),N=r(5304),P=O.f,A=I.f,C=S.f,D=n.Symbol,k=n.JSON,L=k&&k.stringify,j=p("_hidden"),F=p("toPrimitive"),R={}.propertyIsEnumerable,G=c("symbol-registry"),B=c("symbols"),U=c("op-symbols"),q=Object.prototype,z="function"==typeof D&&!!T.f,V=n.QObject,W=!V||!V.prototype||!V.prototype.findChild,X=o&&u((function(){return 7!=E(A({},"a",{get:function(){return A(this,"a",{value:7}).a}})).a}))?function(t,e,r){var n=P(q,e);n&&delete q[e],A(t,e,r),n&&t!==q&&A(q,e,n)}:A,$=function(t){var e=B[t]=E(D.prototype);return e._k=t,e},Y=z&&"symbol"==typeof D.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof D},Q=function(t,e,r){return t===q&&Q(U,e,r),v(t),e=_(e,!0),v(r),i(B,e)?(r.enumerable?(i(t,j)&&t[j][e]&&(t[j][e]=!1),r=E(r,{enumerable:x(0,!1)})):(i(t,j)||A(t,j,x(1,{})),t[j][e]=!0),X(t,e,r)):A(t,e,r)},K=function(t,e){v(t);for(var r,n=g(e=M(e)),i=0,o=n.length;o>i;)Q(t,r=n[i++],e[r]);return t},H=function(t){var e=R.call(this,t=_(t,!0));return!(this===q&&i(B,t)&&!i(U,t))&&(!(e||!i(this,t)||!i(B,t)||i(this,j)&&this[j][t])||e)},J=function(t,e){if(t=M(t),e=_(e,!0),t!==q||!i(B,e)||i(U,e)){var r=P(t,e);return!r||!i(B,e)||i(t,j)&&t[j][e]||(r.enumerable=!0),r}},Z=function(t){for(var e,r=C(M(t)),n=[],o=0;r.length>o;)i(B,e=r[o++])||e==j||e==h||n.push(e);return n},tt=function(t){for(var e,r=t===q,n=C(r?U:M(t)),o=[],s=0;n.length>s;)!i(B,e=n[s++])||r&&!i(q,e)||o.push(B[e]);return o};z||(a((D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var t=f(arguments.length>0?arguments[0]:void 0),e=function(r){this===q&&e.call(U,r),i(this,j)&&i(this[j],t)&&(this[j][t]=!1),X(this,t,x(1,r))};return o&&W&&X(q,t,{configurable:!0,set:e}),$(t)}).prototype,"toString",(function(){return this._k})),O.f=J,I.f=Q,r(8918).f=S.f=Z,r(4498).f=H,T.f=tt,o&&!r(7423)&&a(q,"propertyIsEnumerable",H,!0),d.f=function(t){return $(p(t))}),s(s.G+s.W+s.F*!z,{Symbol:D});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;et.length>rt;)p(et[rt++]);for(var nt=N(p.store),it=0;nt.length>it;)y(nt[it++]);s(s.S+s.F*!z,"Symbol",{for:function(t){return i(G,t+="")?G[t]:G[t]=D(t)},keyFor:function(t){if(!Y(t))throw TypeError(t+" is not a symbol!");for(var e in G)if(G[e]===t)return e},useSetter:function(){W=!0},useSimple:function(){W=!1}}),s(s.S+s.F*!z,"Object",{create:function(t,e){return void 0===e?E(t):K(E(t),e)},defineProperty:Q,defineProperties:K,getOwnPropertyDescriptor:J,getOwnPropertyNames:Z,getOwnPropertySymbols:tt});var ot=u((function(){T.f(1)}));s(s.S+s.F*ot,"Object",{getOwnPropertySymbols:function(t){return T.f(b(t))}}),k&&s(s.S+s.F*(!z||u((function(){var t=D();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))}))),"JSON",{stringify:function(t){for(var e,r,n=[t],i=1;arguments.length>i;)n.push(arguments[i++]);if(r=e=n[1],(w(e)||void 0!==t)&&!Y(t))return m(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!Y(e))return e}),n[1]=e,L.apply(k,n)}}),D.prototype[F]||r(342)(D.prototype,F,D.prototype.valueOf),l(D,"Symbol"),l(Math,"Math",!0),l(n.JSON,"JSON",!0)},5365:(t,e,r)=>{"use strict";var n=r(3310),i=r(2204),o=r(9443),s=r(4883),a=r(3693),h=r(1721),u=r(2962),c=r(7626).ArrayBuffer,l=r(8077),f=o.ArrayBuffer,p=o.DataView,d=i.ABV&&c.isView,y=f.prototype.slice,g=i.VIEW,m="ArrayBuffer";n(n.G+n.W+n.F*(c!==f),{ArrayBuffer:f}),n(n.S+n.F*!i.CONSTR,m,{isView:function(t){return d&&d(t)||u(t)&&g in t}}),n(n.P+n.U+n.F*r(6099)((function(){return!new f(2).slice(1,void 0).byteLength})),m,{slice:function(t,e){if(void 0!==y&&void 0===e)return y.call(s(this),t);for(var r=s(this).byteLength,n=a(t,r),i=a(void 0===e?r:e,r),o=new(l(this,f))(h(i-n)),u=new p(this),c=new p(o),d=0;n<i;)c.setUint8(d++,u.getUint8(n++));return o}}),r(1955)(m)},3689:(t,e,r)=>{var n=r(3310);n(n.G+n.W+n.F*!r(2204).ABV,{DataView:r(9443).DataView})},2553:(t,e,r)=>{r(7670)("Float32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},2193:(t,e,r)=>{r(7670)("Float64",8,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},6520:(t,e,r)=>{r(7670)("Int16",2,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},8898:(t,e,r)=>{r(7670)("Int32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},4157:(t,e,r)=>{r(7670)("Int8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},6791:(t,e,r)=>{r(7670)("Uint16",2,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},1488:(t,e,r)=>{r(7670)("Uint32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},2869:(t,e,r)=>{r(7670)("Uint8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},6435:(t,e,r)=>{r(7670)("Uint8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}),!0)},965:(t,e,r)=>{"use strict";var n,i=r(7626),o=r(4195)(0),s=r(3682),a=r(5687),h=r(8874),u=r(3366),c=r(2962),l=r(4136),f=r(4136),p=!i.ActiveXObject&&"ActiveXObject"in i,d="WeakMap",y=a.getWeak,g=Object.isExtensible,m=u.ufstore,v=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},w={get:function(t){if(c(t)){var e=y(t);return!0===e?m(l(this,d)).get(t):e?e[this._i]:void 0}},set:function(t,e){return u.def(l(this,d),t,e)}},b=t.exports=r(6909)(d,v,w,u,!0,!0);f&&p&&(h((n=u.getConstructor(v,d)).prototype,w),a.NEED=!0,o(["delete","has","get","set"],(function(t){var e=b.prototype,r=e[t];s(e,t,(function(e,i){if(c(e)&&!g(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)}))})))},7495:(t,e,r)=>{"use strict";var n=r(3366),i=r(4136),o="WeakSet";r(6909)(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return n.def(i(this,o),t,!0)}},n,!1,!0)},9718:(t,e,r)=>{"use strict";var n=r(3310),i=r(2342),o=r(9542),s=r(1721),a=r(5266),h=r(2997);n(n.P,"Array",{flatMap:function(t){var e,r,n=o(this);return a(t),e=s(n.length),r=h(n,0),i(r,n,n,e,0,1,t,arguments[1]),r}}),r(9854)("flatMap")},23:(t,e,r)=>{"use strict";var n=r(3310),i=r(2342),o=r(9542),s=r(1721),a=r(9823),h=r(2997);n(n.P,"Array",{flatten:function(){var t=arguments[0],e=o(this),r=s(e.length),n=h(e,0);return i(n,e,e,r,0,void 0===t?1:a(t)),n}}),r(9854)("flatten")},7501:(t,e,r)=>{"use strict";var n=r(3310),i=r(9699)(!0);n(n.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(9854)("includes")},9876:(t,e,r)=>{var n=r(3310),i=r(48)(),o=r(7626).process,s="process"==r(9641)(o);n(n.G,{asap:function(t){var e=s&&o.domain;i(e?e.bind(t):t)}})},386:(t,e,r)=>{var n=r(3310),i=r(9641);n(n.S,"Error",{isError:function(t){return"Error"===i(t)}})},4400:(t,e,r)=>{var n=r(3310);n(n.G,{global:r(7626)})},3025:(t,e,r)=>{r(8807)("Map")},4839:(t,e,r)=>{r(6931)("Map")},5334:(t,e,r)=>{var n=r(3310);n(n.P+n.R,"Map",{toJSON:r(7337)("Map")})},2972:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{clamp:function(t,e,r){return Math.min(r,Math.max(e,t))}})},7115:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},1584:(t,e,r)=>{var n=r(3310),i=180/Math.PI;n(n.S,"Math",{degrees:function(t){return t*i}})},5614:(t,e,r)=>{var n=r(3310),i=r(5284),o=r(7368);n(n.S,"Math",{fscale:function(t,e,r,n,s){return o(i(t,e,r,n,s))}})},7624:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{iaddh:function(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)+(n>>>0)+((i&o|(i|o)&~(i+o>>>0))>>>31)|0}})},1973:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{imulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,s=i&r,a=n>>16,h=i>>16,u=(a*s>>>0)+(o*s>>>16);return a*h+(u>>16)+((o*h>>>0)+(u&r)>>16)}})},2019:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{isubh:function(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)-(n>>>0)-((~i&o|~(i^o)&i-o>>>0)>>>31)|0}})},2694:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},3241:(t,e,r)=>{var n=r(3310),i=Math.PI/180;n(n.S,"Math",{radians:function(t){return t*i}})},4691:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{scale:r(5284)})},9138:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},1047:(t,e,r)=>{var n=r(3310);n(n.S,"Math",{umulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,s=i&r,a=n>>>16,h=i>>>16,u=(a*s>>>0)+(o*s>>>16);return a*h+(u>>>16)+((o*h>>>0)+(u&r)>>>16)}})},3508:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(5266),s=r(3269);r(4421)&&n(n.P+r(4258),"Object",{__defineGetter__:function(t,e){s.f(i(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},3971:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(5266),s=r(3269);r(4421)&&n(n.P+r(4258),"Object",{__defineSetter__:function(t,e){s.f(i(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},2457:(t,e,r)=>{var n=r(3310),i=r(5587)(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},741:(t,e,r)=>{var n=r(3310),i=r(1529),o=r(7931),s=r(7765),a=r(7492);n(n.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,r,n=o(t),h=s.f,u=i(n),c={},l=0;u.length>l;)void 0!==(r=h(n,e=u[l++]))&&a(c,e,r);return c}})},2037:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(2851),s=r(4550),a=r(7765).f;r(4421)&&n(n.P+r(4258),"Object",{__lookupGetter__:function(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.get}while(r=s(r))}})},1087:(t,e,r)=>{"use strict";var n=r(3310),i=r(9542),o=r(2851),s=r(4550),a=r(7765).f;r(4421)&&n(n.P+r(4258),"Object",{__lookupSetter__:function(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.set}while(r=s(r))}})},8895:(t,e,r)=>{var n=r(3310),i=r(5587)(!1);n(n.S,"Object",{values:function(t){return i(t)}})},3397:(t,e,r)=>{"use strict";var n=r(3310),i=r(7626),o=r(5042),s=r(48)(),a=r(1379)("observable"),h=r(5266),u=r(4883),c=r(9151),l=r(9490),f=r(342),p=r(8372),d=p.RETURN,y=function(t){return null==t?void 0:h(t)},g=function(t){var e=t._c;e&&(t._c=void 0,e())},m=function(t){return void 0===t._o},v=function(t){m(t)||(t._o=void 0,g(t))},w=function(t,e){u(t),this._c=void 0,this._o=t,t=new b(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:h(r),this._c=r)}catch(e){return void t.error(e)}m(this)&&g(this)};w.prototype=l({},{unsubscribe:function(){v(this)}});var b=function(t){this._s=t};b.prototype=l({},{next:function(t){var e=this._s;if(!m(e)){var r=e._o;try{var n=y(r.next);if(n)return n.call(r,t)}catch(t){try{v(e)}finally{throw t}}}},error:function(t){var e=this._s;if(m(e))throw t;var r=e._o;e._o=void 0;try{var n=y(r.error);if(!n)throw t;t=n.call(r,t)}catch(t){try{g(e)}finally{throw t}}return g(e),t},complete:function(t){var e=this._s;if(!m(e)){var r=e._o;e._o=void 0;try{var n=y(r.complete);t=n?n.call(r,t):void 0}catch(t){try{g(e)}finally{throw t}}return g(e),t}}});var M=function(t){c(this,M,"Observable","_f")._f=h(t)};l(M.prototype,{subscribe:function(t){return new w(t,this._f)},forEach:function(t){var e=this;return new(o.Promise||i.Promise)((function(r,n){h(t);var i=e.subscribe({next:function(e){try{return t(e)}catch(t){n(t),i.unsubscribe()}},error:n,complete:r})}))}}),l(M,{from:function(t){var e="function"==typeof this?this:M,r=y(u(t)[a]);if(r){var n=u(r.call(t));return n.constructor===e?n:new e((function(t){return n.subscribe(t)}))}return new e((function(e){var r=!1;return s((function(){if(!r){try{if(p(t,!1,(function(t){if(e.next(t),r)return d}))===d)return}catch(t){if(r)throw t;return void e.error(t)}e.complete()}})),function(){r=!0}}))},of:function(){for(var t=0,e=arguments.length,r=new Array(e);t<e;)r[t]=arguments[t++];return new("function"==typeof this?this:M)((function(t){var e=!1;return s((function(){if(!e){for(var n=0;n<r.length;++n)if(t.next(r[n]),e)return;t.complete()}})),function(){e=!0}}))}}),f(M.prototype,a,(function(){return this})),n(n.G,{Observable:M}),r(1955)("Observable")},4613:(t,e,r)=>{"use strict";var n=r(3310),i=r(5042),o=r(7626),s=r(8077),a=r(649);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then((function(){return r}))}:t,r?function(r){return a(e,t()).then((function(){throw r}))}:t)}})},1961:(t,e,r)=>{"use strict";var n=r(3310),i=r(2690),o=r(5222);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},8137:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.key,s=n.set;n.exp({defineMetadata:function(t,e,r,n){s(t,e,i(r),o(n))}})},9447:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function(t,e){var r=arguments.length<3?void 0:o(arguments[2]),n=s(i(e),r,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var h=a.get(e);return h.delete(r),!!h.size||a.delete(e)}})},6381:(t,e,r)=>{var n=r(5871),i=r(4181),o=r(9913),s=r(4883),a=r(4550),h=o.keys,u=o.key,c=function(t,e){var r=h(t,e),o=a(t);if(null===o)return r;var s=c(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function(t){return c(s(t),arguments.length<2?void 0:u(arguments[1]))}})},4047:(t,e,r)=>{var n=r(9913),i=r(4883),o=r(4550),s=n.has,a=n.get,h=n.key,u=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?u(t,n,r):void 0};n.exp({getMetadata:function(t,e){return u(t,i(e),arguments.length<3?void 0:h(arguments[2]))}})},8252:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function(t){return o(i(t),arguments.length<2?void 0:s(arguments[1]))}})},7761:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.get,s=n.key;n.exp({getOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},3006:(t,e,r)=>{var n=r(9913),i=r(4883),o=r(4550),s=n.has,a=n.key,h=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&h(t,n,r)};n.exp({hasMetadata:function(t,e){return h(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},8296:(t,e,r)=>{var n=r(9913),i=r(4883),o=n.has,s=n.key;n.exp({hasOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},2598:(t,e,r)=>{var n=r(9913),i=r(4883),o=r(5266),s=n.key,a=n.set;n.exp({metadata:function(t,e){return function(r,n){a(t,e,(void 0!==n?i:o)(r),s(n))}}})},780:(t,e,r)=>{r(8807)("Set")},2847:(t,e,r)=>{r(6931)("Set")},2409:(t,e,r)=>{var n=r(3310);n(n.P+n.R,"Set",{toJSON:r(7337)("Set")})},1130:(t,e,r)=>{"use strict";var n=r(3310),i=r(8840)(!0),o=r(6099)((function(){return"𠮷"!=="𠮷".at(0)}));n(n.P+n.F*o,"String",{at:function(t){return i(this,t)}})},3173:(t,e,r)=>{"use strict";var n=r(3310),i=r(4821),o=r(1721),s=r(2432),a=r(6403),h=RegExp.prototype,u=function(t,e){this._r=t,this._s=e};r(1700)(u,"RegExp String",(function(){var t=this._r.exec(this._s);return{value:t,done:null===t}})),n(n.P,"String",{matchAll:function(t){if(i(this),!s(t))throw TypeError(t+" is not a regexp!");var e=String(this),r="flags"in h?String(t.flags):a.call(t),n=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return n.lastIndex=o(t.lastIndex),new u(n,e)}})},6626:(t,e,r)=>{"use strict";var n=r(3310),i=r(2011),o=r(8452),s=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);n(n.P+n.F*s,"String",{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},5486:(t,e,r)=>{"use strict";var n=r(3310),i=r(2011),o=r(8452),s=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);n(n.P+n.F*s,"String",{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},2192:(t,e,r)=>{"use strict";r(6426)("trimLeft",(function(t){return function(){return t(this,1)}}),"trimStart")},5805:(t,e,r)=>{"use strict";r(6426)("trimRight",(function(t){return function(){return t(this,2)}}),"trimEnd")},186:(t,e,r)=>{r(9729)("asyncIterator")},3845:(t,e,r)=>{r(9729)("observable")},9113:(t,e,r)=>{var n=r(3310);n(n.S,"System",{global:r(7626)})},3619:(t,e,r)=>{r(8807)("WeakMap")},1767:(t,e,r)=>{r(6931)("WeakMap")},5884:(t,e,r)=>{r(8807)("WeakSet")},3453:(t,e,r)=>{r(6931)("WeakSet")},3963:(t,e,r)=>{for(var n=r(8759),i=r(5304),o=r(3682),s=r(7626),a=r(342),h=r(568),u=r(1379),c=u("iterator"),l=u("toStringTag"),f=h.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(p),y=0;y<d.length;y++){var g,m=d[y],v=p[m],w=s[m],b=w&&w.prototype;if(b&&(b[c]||a(b,c,f),b[l]||a(b,l,m),h[m]=f,v))for(g in n)b[g]||o(b,g,n[g],!0)}},5377:(t,e,r)=>{var n=r(3310),i=r(9788);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},8123:(t,e,r)=>{var n=r(7626),i=r(3310),o=r(8452),s=[].slice,a=/MSIE .\./.test(o),h=function(t){return function(e,r){var n=arguments.length>2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:h(n.setTimeout),setInterval:h(n.setInterval)})},5706:(t,e,r)=>{r(5968),r(663),r(6133),r(1475),r(8534),r(641),r(7293),r(5081),r(3750),r(5524),r(5556),r(402),r(848),r(5997),r(3033),r(2213),r(9248),r(215),r(8884),r(7910),r(814),r(7990),r(202),r(7164),r(5669),r(3883),r(9803),r(3596),r(3519),r(708),r(6899),r(8172),r(6313),r(7782),r(3419),r(8583),r(4587),r(7165),r(6875),r(4259),r(1133),r(6516),r(1524),r(2056),r(5732),r(811),r(2172),r(8921),r(6798),r(2438),r(1322),r(429),r(1479),r(7702),r(7592),r(5995),r(9435),r(7011),r(5554),r(7619),r(6585),r(9071),r(7836),r(9259),r(3133),r(9462),r(7443),r(7279),r(4715),r(1482),r(8742),r(220),r(7349),r(5852),r(2461),r(9016),r(857),r(8396),r(4023),r(7391),r(6636),r(4494),r(1250),r(644),r(6076),r(6897),r(1982),r(6257),r(5472),r(9461),r(9359),r(3022),r(6978),r(1285),r(6666),r(8400),r(9027),r(7456),r(9661),r(8759),r(2678),r(1196),r(7950),r(140),r(1592),r(70),r(1758),r(4503),r(6984),r(8780),r(5871),r(965),r(7495),r(5365),r(3689),r(4157),r(2869),r(6435),r(6520),r(6791),r(8898),r(1488),r(2553),r(2193),r(9026),r(2267),r(4086),r(106),r(3533),r(2134),r(9212),r(2583),r(2877),r(9636),r(2014),r(1194),r(509),r(6221),r(7501),r(9718),r(23),r(1130),r(5486),r(6626),r(2192),r(5805),r(3173),r(186),r(3845),r(741),r(8895),r(2457),r(3508),r(3971),r(2037),r(1087),r(5334),r(2409),r(4839),r(2847),r(1767),r(3453),r(3025),r(780),r(3619),r(5884),r(4400),r(9113),r(386),r(2972),r(7115),r(1584),r(5614),r(7624),r(2019),r(1973),r(2694),r(3241),r(4691),r(1047),r(9138),r(4613),r(1961),r(8137),r(9447),r(4047),r(6381),r(7761),r(8252),r(3006),r(8296),r(2598),r(9876),r(3397),r(8123),r(5377),r(3963),t.exports=r(5042)},1836:t=>{function e(t){if(t)return function(t){for(var r in e.prototype)t[r]=e.prototype[r];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},e.prototype.once=function(t,e){var r=this;function n(){r.off(t,n),e.apply(this,arguments)}return this._callbacks=this._callbacks||{},n.fn=e,this.on(t,n),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks[t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var i=0;i<n.length;i++)if((r=n[i])===e||r.fn===e){n.splice(i,1);break}return this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),r=this._callbacks[t];if(r)for(var n=0,i=(r=r.slice(0)).length;n<i;++n)r[n].apply(this,e);return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},1581:t=>{function e(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(t){return"function"==typeof t}function n(t){return"object"==typeof t&&null!==t}function i(t){return void 0===t}t.exports=e,e.EventEmitter=e,e.prototype._events=void 0,e.prototype._maxListeners=void 0,e.defaultMaxListeners=10,e.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},e.prototype.emit=function(t){var e,o,s,a,h,u;if(this._events||(this._events={}),"error"===t&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((e=arguments[1])instanceof Error)throw e;var c=new Error('Uncaught, unspecified "error" event. ('+e+")");throw c.context=e,c}if(i(o=this._events[t]))return!1;if(r(o))switch(arguments.length){case 1:o.call(this);break;case 2:o.call(this,arguments[1]);break;case 3:o.call(this,arguments[1],arguments[2]);break;default:a=Array.prototype.slice.call(arguments,1),o.apply(this,a)}else if(n(o))for(a=Array.prototype.slice.call(arguments,1),s=(u=o.slice()).length,h=0;h<s;h++)u[h].apply(this,a);return!0},e.prototype.addListener=function(t,o){var s;if(!r(o))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,r(o.listener)?o.listener:o),this._events[t]?n(this._events[t])?this._events[t].push(o):this._events[t]=[this._events[t],o]:this._events[t]=o,n(this._events[t])&&!this._events[t].warned&&(s=i(this._maxListeners)?e.defaultMaxListeners:this._maxListeners)&&s>0&&this._events[t].length>s&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},e.prototype.on=e.prototype.addListener,e.prototype.once=function(t,e){if(!r(e))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(t,i),n||(n=!0,e.apply(this,arguments))}return i.listener=e,this.on(t,i),this},e.prototype.removeListener=function(t,e){var i,o,s,a;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(s=(i=this._events[t]).length,o=-1,i===e||r(i.listener)&&i.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(n(i)){for(a=s;a-- >0;)if(i[a]===e||i[a].listener&&i[a].listener===e){o=a;break}if(o<0)return this;1===i.length?(i.length=0,delete this._events[t]):i.splice(o,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},e.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[t]))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},e.prototype.listeners=function(t){return this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},e.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},e.listenerCount=function(t,e){return t.listenerCount(e)}},7701:(t,e)=>{e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,h=(1<<a)-1,u=h>>1,c=-7,l=r?i-1:0,f=r?-1:1,p=t[e+l];for(l+=f,o=p&(1<<-c)-1,p>>=-c,c+=a;c>0;o=256*o+t[e+l],l+=f,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=n;c>0;s=256*s+t[e+l],l+=f,c-=8);if(0===o)o=1-u;else{if(o===h)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=u}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,h,u=8*o-i-1,c=(1<<u)-1,l=c>>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,y=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+l>=1?f/h:f*Math.pow(2,1-l))*h>=2&&(s++,h/=2),s+l>=c?(a=0,s=c):s+l>=1?(a=(e*h-1)*Math.pow(2,i),s+=l):(a=e*Math.pow(2,l-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=d,a/=256,i-=8);for(s=s<<i|a,u+=i;u>0;t[r+p]=255&s,p+=d,s/=256,u-=8);t[r+p-d]|=128*y}},4213:function(t,e){!function(t){"use strict";function e(t,e){return t>e?1:t<e?-1:0}var r=function(t,r){void 0===t&&(t=e),void 0===r&&(r=!1),this._compare=t,this._root=null,this._size=0,this._noDuplicates=!!r},n={size:{configurable:!0}};function i(t,e,r,n,o){var s=o-n;if(s>0){var a=n+Math.floor(s/2),h={key:e[a],data:r[a],parent:t};return h.left=i(h,e,r,n,a),h.right=i(h,e,r,a+1,o),h}return null}function o(t,e,r,n,i){if(!(r>=n)){for(var s=t[r+n>>1],a=r-1,h=n+1;;){do{a++}while(i(t[a],s)<0);do{h--}while(i(t[h],s)>0);if(a>=h)break;var u=t[a];t[a]=t[h],t[h]=u,u=e[a],e[a]=e[h],e[h]=u}o(t,e,r,h,i),o(t,e,h+1,n,i)}}r.prototype.rotateLeft=function(t){var e=t.right;e&&(t.right=e.left,e.left&&(e.left.parent=t),e.parent=t.parent),t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.left=t),t.parent=e},r.prototype.rotateRight=function(t){var e=t.left;e&&(t.left=e.right,e.right&&(e.right.parent=t),e.parent=t.parent),t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.right=t),t.parent=e},r.prototype._splay=function(t){for(var e=this;t.parent;){var r=t.parent;r.parent?r.left===t&&r.parent.left===r?(e.rotateRight(r.parent),e.rotateRight(r)):r.right===t&&r.parent.right===r?(e.rotateLeft(r.parent),e.rotateLeft(r)):r.left===t&&r.parent.right===r?(e.rotateRight(r),e.rotateLeft(r)):(e.rotateLeft(r),e.rotateRight(r)):r.left===t?e.rotateRight(r):e.rotateLeft(r)}},r.prototype.splay=function(t){for(var e,r,n,i,o;t.parent;)(r=(e=t.parent).parent)&&r.parent?((n=r.parent).left===r?n.left=t:n.right=t,t.parent=n):(t.parent=null,this._root=t),i=t.left,o=t.right,t===e.left?(r&&(r.left===e?(e.right?(r.left=e.right,r.left.parent=r):r.left=null,e.right=r,r.parent=e):(i?(r.right=i,i.parent=r):r.right=null,t.left=r,r.parent=t)),o?(e.left=o,o.parent=e):e.left=null,t.right=e,e.parent=t):(r&&(r.right===e?(e.left?(r.right=e.left,r.right.parent=r):r.right=null,e.left=r,r.parent=e):(o?(r.left=o,o.parent=r):r.left=null,t.right=r,r.parent=t)),i?(e.right=i,i.parent=e):e.right=null,t.left=e,e.parent=t)},r.prototype.replace=function(t,e){t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.parent=t.parent)},r.prototype.minNode=function(t){if(void 0===t&&(t=this._root),t)for(;t.left;)t=t.left;return t},r.prototype.maxNode=function(t){if(void 0===t&&(t=this._root),t)for(;t.right;)t=t.right;return t},r.prototype.insert=function(t,e){var r=this._root,n=null,i=this._compare;if(this._noDuplicates)for(;r;){if(n=r,0===i(r.key,t))return;r=i(r.key,t)<0?r.right:r.left}else for(;r;)n=r,r=i(r.key,t)<0?r.right:r.left;return r={key:t,data:e,left:null,right:null,parent:n},n?i(n.key,r.key)<0?n.right=r:n.left=r:this._root=r,this.splay(r),this._size++,r},r.prototype.find=function(t){for(var e=this._root,r=this._compare;e;){var n=r(e.key,t);if(n<0)e=e.right;else{if(!(n>0))return e;e=e.left}}return null},r.prototype.contains=function(t){for(var e=this._root,r=this._compare;e;){var n=r(t,e.key);if(0===n)return!0;e=n<0?e.left:e.right}return!1},r.prototype.remove=function(t){var e=this.find(t);if(!e)return!1;if(this.splay(e),e.left)if(e.right){var r=this.minNode(e.right);r.parent!==e&&(this.replace(r,r.right),r.right=e.right,r.right.parent=r),this.replace(e,r),r.left=e.left,r.left.parent=r}else this.replace(e,e.left);else this.replace(e,e.right);return this._size--,!0},r.prototype.removeNode=function(t){if(!t)return!1;if(this.splay(t),t.left)if(t.right){var e=this.minNode(t.right);e.parent!==t&&(this.replace(e,e.right),e.right=t.right,e.right.parent=e),this.replace(t,e),e.left=t.left,e.left.parent=e}else this.replace(t,t.left);else this.replace(t,t.right);return this._size--,!0},r.prototype.erase=function(t){var e=this.find(t);if(e){this.splay(e);var r=e.left,n=e.right,i=null;r&&(r.parent=null,i=this.maxNode(r),this.splay(i),this._root=i),n&&(r?i.right=n:this._root=n,n.parent=i),this._size--}},r.prototype.pop=function(){var t=this._root,e=null;if(t){for(;t.left;)t=t.left;e={key:t.key,data:t.data},this.remove(t.key)}return e},r.prototype.next=function(t){var e=t;if(e)if(e.right)for(e=e.right;e&&e.left;)e=e.left;else for(e=t.parent;e&&e.right===t;)t=e,e=e.parent;return e},r.prototype.prev=function(t){var e=t;if(e)if(e.left)for(e=e.left;e&&e.right;)e=e.right;else for(e=t.parent;e&&e.left===t;)t=e,e=e.parent;return e},r.prototype.forEach=function(t){for(var e=this._root,r=[],n=!1,i=0;!n;)e?(r.push(e),e=e.left):r.length>0?(t(e=r.pop(),i++),e=e.right):n=!0;return this},r.prototype.range=function(t,e,r,n){for(var i=[],o=this._compare,s=this._root;0!==i.length||s;)if(s)i.push(s),s=s.left;else{if(o((s=i.pop()).key,e)>0)break;if(o(s.key,t)>=0&&r.call(n,s))return this;s=s.right}return this},r.prototype.keys=function(){for(var t=this._root,e=[],r=[],n=!1;!n;)t?(e.push(t),t=t.left):e.length>0?(t=e.pop(),r.push(t.key),t=t.right):n=!0;return r},r.prototype.values=function(){for(var t=this._root,e=[],r=[],n=!1;!n;)t?(e.push(t),t=t.left):e.length>0?(t=e.pop(),r.push(t.data),t=t.right):n=!0;return r},r.prototype.at=function(t){for(var e=this._root,r=[],n=!1,i=0;!n;)if(e)r.push(e),e=e.left;else if(r.length>0){if(e=r.pop(),i===t)return e;i++,e=e.right}else n=!0;return null},r.prototype.load=function(t,e,r){if(void 0===t&&(t=[]),void 0===e&&(e=[]),void 0===r&&(r=!1),0!==this._size)throw new Error("bulk-load: tree is not empty");var n=t.length;return r&&o(t,e,0,n-1,this._compare),this._root=i(null,t,e,0,n),this._size=n,this},r.prototype.min=function(){var t=this.minNode(this._root);return t?t.key:null},r.prototype.max=function(){var t=this.maxNode(this._root);return t?t.key:null},r.prototype.isEmpty=function(){return null===this._root},n.size.get=function(){return this._size},r.createTree=function(t,e,n,i,o){return new r(n,o).load(t,e,i)},Object.defineProperties(r.prototype,n);function s(t,e,r){null===e?(t.inOut=!1,t.otherInOut=!0):(t.isSubject===e.isSubject?(t.inOut=!e.inOut,t.otherInOut=e.otherInOut):(t.inOut=!e.otherInOut,t.otherInOut=e.isVertical()?!e.inOut:e.inOut),e&&(t.prevInResult=!a(e,r)||e.isVertical()?e.prevInResult:e)),t.inResult=a(t,r)}function a(t,e){switch(t.type){case 0:switch(e){case 0:return!t.otherInOut;case 1:return t.otherInOut;case 2:return t.isSubject&&t.otherInOut||!t.isSubject&&!t.otherInOut;case 3:return!0}break;case 2:return 0===e||1===e;case 3:return 2===e;case 1:return!1}return!1}var h=function(t,e,r,n,i){this.left=e,this.point=t,this.otherEvent=r,this.isSubject=n,this.type=i||0,this.inOut=!1,this.otherInOut=!1,this.prevInResult=null,this.inResult=!1,this.resultInOut=!1,this.isExteriorRing=!0};function u(t,e){return t[0]===e[0]&&t[1]===e[1]}function c(t,e,r){return(t[0]-r[0])*(e[1]-r[1])-(e[0]-r[0])*(t[1]-r[1])}function l(t,e){var r=t.point,n=e.point;return r[0]>n[0]?1:r[0]<n[0]?-1:r[1]!==n[1]?r[1]>n[1]?1:-1:function(t,e,r,n){return t.left!==e.left?t.left?1:-1:0!==c(r,t.otherEvent.point,e.otherEvent.point)?t.isBelow(e.otherEvent.point)?-1:1:!t.isSubject&&e.isSubject?1:-1}(t,e,r)}function f(t,e,r){var n=new h(e,!1,t,t.isSubject),i=new h(e,!0,t.otherEvent,t.isSubject);return u(t.point,t.otherEvent.point)&&console.warn("what is that, a collapsed segment?",t),n.contourId=i.contourId=t.contourId,l(i,t.otherEvent)>0&&(t.otherEvent.left=!0,i.left=!1),t.otherEvent.otherEvent=i,t.otherEvent=n,r.push(i),r.push(n),r}function p(t,e){return t[0]*e[1]-t[1]*e[0]}function d(t,e){return t[0]*e[0]+t[1]*e[1]}function y(t,e,r){var n=function(t,e,r,n,i){var o=[e[0]-t[0],e[1]-t[1]],s=[n[0]-r[0],n[1]-r[1]];function a(t,e,r){return[t[0]+e*r[0],t[1]+e*r[1]]}var h=[r[0]-t[0],r[1]-t[1]],u=p(o,s),c=u*u,l=d(o,o);if(c>0){var f=p(h,s)/u;if(f<0||f>1)return null;var y=p(h,o)/u;return y<0||y>1?null:0===f||1===f?i?null:[a(t,f,o)]:0===y||1===y?i?null:[a(r,y,s)]:[a(t,f,o)]}if((c=(u=p(h,o))*u)>0)return null;var g=d(o,h)/l,m=g+d(o,s)/l,v=Math.min(g,m),w=Math.max(g,m);return v<=1&&w>=0?1===v?i?null:[a(t,v>0?v:0,o)]:0===w?i?null:[a(t,w<1?w:1,o)]:i&&0===v&&1===w?null:[a(t,v>0?v:0,o),a(t,w<1?w:1,o)]:null}(t.point,t.otherEvent.point,e.point,e.otherEvent.point),i=n?n.length:0;if(0===i)return 0;if(1===i&&(u(t.point,e.point)||u(t.otherEvent.point,e.otherEvent.point)))return 0;if(2===i&&t.isSubject===e.isSubject)return 0;if(1===i)return u(t.point,n[0])||u(t.otherEvent.point,n[0])||f(t,n[0],r),u(e.point,n[0])||u(e.otherEvent.point,n[0])||f(e,n[0],r),1;var o=[],s=!1,a=!1;return u(t.point,e.point)?s=!0:1===l(t,e)?o.push(e,t):o.push(t,e),u(t.otherEvent.point,e.otherEvent.point)?a=!0:1===l(t.otherEvent,e.otherEvent)?o.push(e.otherEvent,t.otherEvent):o.push(t.otherEvent,e.otherEvent),s&&a||s?(e.type=1,t.type=e.inOut===t.inOut?2:3,s&&!a&&f(o[1].otherEvent,o[0].point,r),2):a?(f(o[0],o[1].point,r),3):o[0]!==o[3].otherEvent?(f(o[0],o[1].point,r),f(o[1],o[2].point,r),3):(f(o[0],o[1].point,r),f(o[3].otherEvent,o[2].point,r),3)}function g(t,e){if(t===e)return 0;if(0!==c(t.point,t.otherEvent.point,e.point)||0!==c(t.point,t.otherEvent.point,e.otherEvent.point))return u(t.point,e.point)?t.isBelow(e.otherEvent.point)?-1:1:t.point[0]===e.point[0]?t.point[1]<e.point[1]?-1:1:1===l(t,e)?e.isAbove(t.point)?-1:1:t.isBelow(e.point)?-1:1;if(t.isSubject!==e.isSubject)return t.isSubject?-1:1;var r=t.point,n=e.point;return r[0]===n[0]&&r[1]===n[1]?(r=t.otherEvent.point,n=e.otherEvent.point,r[0]===n[0]&&r[1]===n[1]?0:t.contourId>e.contourId?1:-1):1===l(t,e)?1:-1}function m(t,e,r,n){var i=t+1,o=e.length;if(i>o-1)return t-1;for(var s=e[t].point,a=e[i].point;i<o&&a[0]===s[0]&&a[1]===s[1];){if(!r[i])return i;a=e[++i].point}for(i=t-1;r[i]&&i>=n;)i--;return i}function v(t,e){var r,n,i,o=function(t){var e,r,n,i,o=[];for(r=0,n=t.length;r<n;r++)((e=t[r]).left&&e.inResult||!e.left&&e.otherEvent.inResult)&&o.push(e);for(var s=!1;!s;)for(s=!0,r=0,n=o.length;r<n;r++)r+1<n&&1===l(o[r],o[r+1])&&(i=o[r],o[r]=o[r+1],o[r+1]=i,s=!1);for(r=0,n=o.length;r<n;r++)(e=o[r]).pos=r;for(r=0,n=o.length;r<n;r++)(e=o[r]).left||(i=e.pos,e.pos=e.otherEvent.pos,e.otherEvent.pos=i);return o}(t),s={},a=[];for(r=0,n=o.length;r<n;r++)if(!s[r]){var h=[[]];o[r].isExteriorRing?2===e&&!o[r].isSubject&&a.length>1?a[a.length-1].push(h[0]):a.push(h):2!==e||o[r].isSubject||0!==a.length?0===a.length?a.push([[h]]):a[a.length-1].push(h[0]):a.push(h);var u=a.length-1,c=r,f=o[r].point;for(h[0].push(f);c>=r;)i=o[c],s[c]=!0,i.left?(i.resultInOut=!1,i.contourId=u):(i.otherEvent.resultInOut=!0,i.otherEvent.contourId=u),s[c=i.pos]=!0,h[0].push(o[c].point),c=m(c,o,s,r);i=o[c=-1===c?r:c],s[c]=s[i.pos]=!0,i.otherEvent.resultInOut=!0,i.otherEvent.contourId=u}return a}h.prototype.isBelow=function(t){var e=this.point,r=this.otherEvent.point;return this.left?(e[0]-t[0])*(r[1]-t[1])-(r[0]-t[0])*(e[1]-t[1])>0:(r[0]-t[0])*(e[1]-t[1])-(e[0]-t[0])*(r[1]-t[1])>0},h.prototype.isAbove=function(t){return!this.isBelow(t)},h.prototype.isVertical=function(){return this.point[0]===this.otherEvent.point[0]},h.prototype.clone=function(){var t=new h(this.point,this.left,this.otherEvent,this.isSubject,this.type);return t.inResult=this.inResult,t.prevInResult=this.prevInResult,t.isExteriorRing=this.isExteriorRing,t.inOut=this.inOut,t.otherInOut=this.otherInOut,t};var w=M,b=M;function M(t,e){if(!(this instanceof M))return new M(t,e);if(this.data=t||[],this.length=this.data.length,this.compare=e||_,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)}function _(t,e){return t<e?-1:t>e?1:0}M.prototype={push:function(t){this.data.push(t),this.length++,this._up(this.length-1)},pop:function(){if(0!==this.length){var t=this.data[0];return this.length--,this.length>0&&(this.data[0]=this.data[this.length],this._down(0)),this.data.pop(),t}},peek:function(){return this.data[0]},_up:function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,o=e[i];if(r(n,o)>=0)break;e[t]=o,t=i}e[t]=n},_down:function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t<n;){var o=1+(t<<1),s=o+1,a=e[o];if(s<this.length&&r(e[s],a)<0&&(o=s,a=e[s]),r(a,i)>=0)break;e[t]=a,t=o}e[t]=i}},w.default=b;var x=Math.max,E=Math.min,S=0;function O(t,e,r,n,i,o){var s,a,u,c,f,p;for(s=0,a=t.length-1;s<a;s++)if(u=t[s],c=t[s+1],f=new h(u,!1,void 0,e),p=new h(c,!1,f,e),f.otherEvent=p,u[0]!==c[0]||u[1]!==c[1]){f.contourId=p.contourId=r,o||(f.isExteriorRing=!1,p.isExteriorRing=!1),l(f,p)>0?p.left=!0:f.left=!0;var d=u[0],y=u[1];i[0]=E(i[0],d),i[1]=E(i[1],y),i[2]=x(i[2],d),i[3]=x(i[3],y),n.push(f),n.push(p)}}var T=[];function I(t,e,n){"number"==typeof t[0][0][0]&&(t=[t]),"number"==typeof e[0][0][0]&&(e=[e]);var i=function(t,e,r){var n=null;return t.length*e.length==0&&(0===r?n=T:2===r?n=t:1!==r&&3!==r||(n=0===t.length?e:t)),n}(t,e,n);if(i)return i===T?null:i;var o=[1/0,1/0,-1/0,-1/0],a=[1/0,1/0,-1/0,-1/0],h=function(t,e,r,n,i){var o,s,a,h,u,c,f=new w(null,l);for(a=0,h=t.length;a<h;a++)for(u=0,c=(o=t[a]).length;u<c;u++)(s=0===u)&&S++,O(o[u],!0,S,f,r,s);for(a=0,h=e.length;a<h;a++)for(u=0,c=(o=e[a]).length;u<c;u++)s=0===u,2===i&&(s=!1),s&&S++,O(o[u],!1,S,f,n,s);return f}(t,e,o,a,n);return(i=function(t,e,r,n,i){var o=null;return(r[0]>n[2]||n[0]>r[2]||r[1]>n[3]||n[1]>r[3])&&(0===i?o=T:2===i?o=t:1!==i&&3!==i||(o=t.concat(e))),o}(t,e,o,a,n))?i===T?null:i:v(function(t,e,n,i,o,a){for(var h,u,c,l=new r(g),f=[],p=Math.min(i[2],o[2]);0!==t.length;){var d=t.pop();if(f.push(d),0===a&&d.point[0]>p||2===a&&d.point[0]>i[2])break;if(d.left){u=h=l.insert(d),h=h!==(c=l.minNode())?l.prev(h):null,u=l.next(u);var m=h?h.key:null;if(s(d,m,a),u&&2===y(d,u.key,t)&&(s(d,m,a),s(d,u.key,a)),h&&2===y(h.key,d,t)){var v=h;s(m,(v=v!==c?l.prev(v):null)?v.key:null,a),s(d,m,a)}}else d=d.otherEvent,u=h=l.find(d),h&&u&&(h=h!==c?l.prev(h):null,u=l.next(u),l.remove(d),u&&h&&y(h.key,u.key,t))}return f}(h,0,0,o,a,n),n)}var N={UNION:1,DIFFERENCE:2,INTERSECTION:0,XOR:3};t.union=function(t,e){return I(t,e,1)},t.diff=function(t,e){return I(t,e,2)},t.xor=function(t,e){return I(t,e,3)},t.intersection=function(t,e){return I(t,e,0)},t.operations=N,Object.defineProperty(t,"__esModule",{value:!0})}(e)},3742:function(t,e,r){var n;t=r.nmd(t),n=function(){var t=null,e={};u("monochrome",null,[[0,0],[100,0]]),u("red",[-26,18],[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]),u("orange",[18,46],[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]),u("yellow",[46,62],[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]),u("green",[62,178],[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]),u("blue",[178,257],[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]),u("purple",[257,282],[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]),u("pink",[282,334],[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]);var r=[],n=function(e){if(void 0!==(e=e||{}).seed&&null!==e.seed&&e.seed===parseInt(e.seed,10))t=e.seed;else if("string"==typeof e.seed)t=function(t){for(var e=0,r=0;r!==t.length&&!(e>=Number.MAX_SAFE_INTEGER);r++)e+=t.charCodeAt(r);return e}(e.seed);else{if(void 0!==e.seed&&null!==e.seed)throw new TypeError("The seed value must be an integer or string");t=null}var a,h;if(null!==e.count&&void 0!==e.count){for(var u=e.count,l=[],p=0;p<e.count;p++)r.push(!1);for(e.count=null;u>l.length;){var d=n(e);null!==t&&(e.seed=t),l.push(d)}return e.count=u,l}return function(t,e){switch(e.format){case"hsvArray":return t;case"hslArray":return f(t);case"hsl":var r=f(t);return"hsl("+r[0]+", "+r[1]+"%, "+r[2]+"%)";case"hsla":var n=f(t),i=e.alpha||Math.random();return"hsla("+n[0]+", "+n[1]+"%, "+n[2]+"%, "+i+")";case"rgbArray":return c(t);case"rgb":return"rgb("+c(t).join(", ")+")";case"rgba":var o=c(t);return i=e.alpha||Math.random(),"rgba("+o.join(", ")+", "+i+")";default:return function(t){var e=c(t);function r(t){var e=t.toString(16);return 1==e.length?"0"+e:e}return"#"+r(e[0])+r(e[1])+r(e[2])}(t)}}([a=i(e),h=o(a,e),s(a,h,e)],e)};function i(t){if(r.length>0){var n=h(s=function(t){if(isNaN(t)){if("string"==typeof t)if(e[t]){var r=e[t];if(r.hueRange)return r.hueRange}else if(t.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i))return a(l(t)[0]).hueRange}else{var n=parseInt(t);if(n<360&&n>0)return a(t).hueRange}return[0,360]}(t.hue)),i=(s[1]-s[0])/r.length,o=parseInt((n-s[0])/i);return!0===r[o]?o=(o+2)%r.length:r[o]=!0,(n=h(s=[(s[0]+o*i)%359,(s[0]+(o+1)*i)%359]))<0&&(n=360+n),n}var s;return(n=h(s=function(t){if("number"==typeof parseInt(t)){var r=parseInt(t);if(r<360&&r>0)return[r,r]}if("string"==typeof t)if(e[t]){var n=e[t];if(n.hueRange)return n.hueRange}else if(t.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)){var i=l(t)[0];return[i,i]}return[0,360]}(t.hue)))<0&&(n=360+n),n}function o(t,e){if("monochrome"===e.hue)return 0;if("random"===e.luminosity)return h([0,100]);var r=function(t){return a(t).saturationRange}(t),n=r[0],i=r[1];switch(e.luminosity){case"bright":n=55;break;case"dark":n=i-10;break;case"light":i=55}return h([n,i])}function s(t,e,r){var n=function(t,e){for(var r=a(t).lowerBounds,n=0;n<r.length-1;n++){var i=r[n][0],o=r[n][1],s=r[n+1][0],h=r[n+1][1];if(e>=i&&e<=s){var u=(h-o)/(s-i);return u*e+(o-u*i)}}return 0}(t,e),i=100;switch(r.luminosity){case"dark":i=n+20;break;case"light":n=(i+n)/2;break;case"random":n=0,i=100}return h([n,i])}function a(t){for(var r in t>=334&&t<=360&&(t-=360),e){var n=e[r];if(n.hueRange&&t>=n.hueRange[0]&&t<=n.hueRange[1])return e[r]}return"Color not found"}function h(e){if(null===t){var r=Math.random();return r+=.618033988749895,r%=1,Math.floor(e[0]+r*(e[1]+1-e[0]))}var n=e[1]||1,i=e[0]||0,o=(t=(9301*t+49297)%233280)/233280;return Math.floor(i+o*(n-i))}function u(t,r,n){var i=n[0][0],o=n[n.length-1][0],s=n[n.length-1][1],a=n[0][1];e[t]={hueRange:r,lowerBounds:n,saturationRange:[i,o],brightnessRange:[s,a]}}function c(t){var e=t[0];0===e&&(e=1),360===e&&(e=359),e/=360;var r=t[1]/100,n=t[2]/100,i=Math.floor(6*e),o=6*e-i,s=n*(1-r),a=n*(1-o*r),h=n*(1-(1-o)*r),u=256,c=256,l=256;switch(i){case 0:u=n,c=h,l=s;break;case 1:u=a,c=n,l=s;break;case 2:u=s,c=n,l=h;break;case 3:u=s,c=a,l=n;break;case 4:u=h,c=s,l=n;break;case 5:u=n,c=s,l=a}return[Math.floor(255*u),Math.floor(255*c),Math.floor(255*l)]}function l(t){t=3===(t=t.replace(/^#/,"")).length?t.replace(/(.)/g,"$1$1"):t;var e=parseInt(t.substr(0,2),16)/255,r=parseInt(t.substr(2,2),16)/255,n=parseInt(t.substr(4,2),16)/255,i=Math.max(e,r,n),o=i-Math.min(e,r,n),s=i?o/i:0;switch(i){case e:return[(r-n)/o%6*60||0,s,i];case r:return[60*((n-e)/o+2)||0,s,i];case n:return[60*((e-r)/o+4)||0,s,i]}}function f(t){var e=t[0],r=t[1]/100,n=t[2]/100,i=(2-r)*n;return[e,Math.round(r*n/(i<1?i:2-i)*1e4)/100,i/2*100]}return n}(),t&&t.exports&&(e=t.exports=n),e.randomColor=n},2526:(t,e,r)=>{!function(t){t.parser=function(t,e){return new n(t,e)},t.SAXParser=n,t.SAXStream=s,t.createStream=function(t,e){return new s(t,e)},t.MAX_BUFFER_LENGTH=65536;var e=["comment","sgmlDecl","textNode","tagName","doctype","procInstName","procInstBody","entity","attribName","attribValue","cdata","script"];function n(r,i){if(!(this instanceof n))return new n(r,i);var o=this;!function(t){for(var r=0,n=e.length;r<n;r++)t[e[r]]=""}(o),o.q=o.c="",o.bufferCheckPosition=t.MAX_BUFFER_LENGTH,o.opt=i||{},o.opt.lowercase=o.opt.lowercase||o.opt.lowercasetags,o.looseCase=o.opt.lowercase?"toLowerCase":"toUpperCase",o.tags=[],o.closed=o.closedRoot=o.sawRoot=!1,o.tag=o.error=null,o.strict=!!r,o.noscript=!(!r&&!o.opt.noscript),o.state=E.BEGIN,o.ENTITIES=Object.create(t.ENTITIES),o.attribList=[],o.opt.xmlns&&(o.ns=Object.create(y)),o.trackPosition=!1!==o.opt.position,o.trackPosition&&(o.position=o.line=o.column=0),S(o,"onready")}t.EVENTS=["text","processinginstruction","sgmldeclaration","doctype","comment","attribute","opentag","closetag","opencdata","cdata","closecdata","error","end","ready","script","opennamespace","closenamespace"],Object.create||(Object.create=function(t){function e(){this.__proto__=t}return e.prototype=t,new e}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__}),Object.keys||(Object.keys=function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e}),n.prototype={end:function(){P(this)},write:function(r){var n=this;if(this.error)throw this.error;if(n.closed)return N(n,"Cannot write after close. Assign an onready handler.");if(null===r)return P(n);for(var i=0,o="";n.c=o=r.charAt(i++);)switch(n.trackPosition&&(n.position++,"\n"===o?(n.line++,n.column=0):n.column++),n.state){case E.BEGIN:"<"===o?(n.state=E.OPEN_WAKA,n.startTagPosition=n.position):b(a,o)&&(A(n,"Non-whitespace before first tag."),n.textNode=o,n.state=E.TEXT);continue;case E.TEXT:if(n.sawRoot&&!n.closedRoot){for(var s=i-1;o&&"<"!==o&&"&"!==o;)(o=r.charAt(i++))&&n.trackPosition&&(n.position++,"\n"===o?(n.line++,n.column=0):n.column++);n.textNode+=r.substring(s,i-1)}"<"===o?(n.state=E.OPEN_WAKA,n.startTagPosition=n.position):(!b(a,o)||n.sawRoot&&!n.closedRoot||A(n,"Text data outside of root node."),"&"===o?n.state=E.TEXT_ENTITY:n.textNode+=o);continue;case E.SCRIPT:"<"===o?n.state=E.SCRIPT_ENDING:n.script+=o;continue;case E.SCRIPT_ENDING:"/"===o?n.state=E.CLOSE_TAG:(n.script+="<"+o,n.state=E.SCRIPT);continue;case E.OPEN_WAKA:if("!"===o)n.state=E.SGML_DECL,n.sgmlDecl="";else if(w(a,o));else if(w(g,o))n.state=E.OPEN_TAG,n.tagName=o;else if("/"===o)n.state=E.CLOSE_TAG,n.tagName="";else if("?"===o)n.state=E.PROC_INST,n.procInstName=n.procInstBody="";else{if(A(n,"Unencoded <"),n.startTagPosition+1<n.position){var h=n.position-n.startTagPosition;o=new Array(h).join(" ")+o}n.textNode+="<"+o,n.state=E.TEXT}continue;case E.SGML_DECL:"[CDATA["===(n.sgmlDecl+o).toUpperCase()?(O(n,"onopencdata"),n.state=E.CDATA,n.sgmlDecl="",n.cdata=""):n.sgmlDecl+o==="--"?(n.state=E.COMMENT,n.comment="",n.sgmlDecl=""):"DOCTYPE"===(n.sgmlDecl+o).toUpperCase()?(n.state=E.DOCTYPE,(n.doctype||n.sawRoot)&&A(n,"Inappropriately located doctype declaration"),n.doctype="",n.sgmlDecl=""):">"===o?(O(n,"onsgmldeclaration",n.sgmlDecl),n.sgmlDecl="",n.state=E.TEXT):w(c,o)?(n.state=E.SGML_DECL_QUOTED,n.sgmlDecl+=o):n.sgmlDecl+=o;continue;case E.SGML_DECL_QUOTED:o===n.q&&(n.state=E.SGML_DECL,n.q=""),n.sgmlDecl+=o;continue;case E.DOCTYPE:">"===o?(n.state=E.TEXT,O(n,"ondoctype",n.doctype),n.doctype=!0):(n.doctype+=o,"["===o?n.state=E.DOCTYPE_DTD:w(c,o)&&(n.state=E.DOCTYPE_QUOTED,n.q=o));continue;case E.DOCTYPE_QUOTED:n.doctype+=o,o===n.q&&(n.q="",n.state=E.DOCTYPE);continue;case E.DOCTYPE_DTD:n.doctype+=o,"]"===o?n.state=E.DOCTYPE:w(c,o)&&(n.state=E.DOCTYPE_DTD_QUOTED,n.q=o);continue;case E.DOCTYPE_DTD_QUOTED:n.doctype+=o,o===n.q&&(n.state=E.DOCTYPE_DTD,n.q="");continue;case E.COMMENT:"-"===o?n.state=E.COMMENT_ENDING:n.comment+=o;continue;case E.COMMENT_ENDING:"-"===o?(n.state=E.COMMENT_ENDED,n.comment=I(n.opt,n.comment),n.comment&&O(n,"oncomment",n.comment),n.comment=""):(n.comment+="-"+o,n.state=E.COMMENT);continue;case E.COMMENT_ENDED:">"!==o?(A(n,"Malformed comment"),n.comment+="--"+o,n.state=E.COMMENT):n.state=E.TEXT;continue;case E.CDATA:"]"===o?n.state=E.CDATA_ENDING:n.cdata+=o;continue;case E.CDATA_ENDING:"]"===o?n.state=E.CDATA_ENDING_2:(n.cdata+="]"+o,n.state=E.CDATA);continue;case E.CDATA_ENDING_2:">"===o?(n.cdata&&O(n,"oncdata",n.cdata),O(n,"onclosecdata"),n.cdata="",n.state=E.TEXT):"]"===o?n.cdata+="]":(n.cdata+="]]"+o,n.state=E.CDATA);continue;case E.PROC_INST:"?"===o?n.state=E.PROC_INST_ENDING:w(a,o)?n.state=E.PROC_INST_BODY:n.procInstName+=o;continue;case E.PROC_INST_BODY:if(!n.procInstBody&&w(a,o))continue;"?"===o?n.state=E.PROC_INST_ENDING:n.procInstBody+=o;continue;case E.PROC_INST_ENDING:">"===o?(O(n,"onprocessinginstruction",{name:n.procInstName,body:n.procInstBody}),n.procInstName=n.procInstBody="",n.state=E.TEXT):(n.procInstBody+="?"+o,n.state=E.PROC_INST_BODY);continue;case E.OPEN_TAG:w(m,o)?n.tagName+=o:(C(n),">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:(b(a,o)&&A(n,"Invalid character in tag name"),n.state=E.ATTRIB));continue;case E.OPEN_TAG_SLASH:">"===o?(L(n,!0),j(n)):(A(n,"Forward-slash in opening tag not followed by >"),n.state=E.ATTRIB);continue;case E.ATTRIB:if(w(a,o))continue;">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:w(g,o)?(n.attribName=o,n.attribValue="",n.state=E.ATTRIB_NAME):A(n,"Invalid attribute name");continue;case E.ATTRIB_NAME:"="===o?n.state=E.ATTRIB_VALUE:">"===o?(A(n,"Attribute without value"),n.attribValue=n.attribName,k(n),L(n)):w(a,o)?n.state=E.ATTRIB_NAME_SAW_WHITE:w(m,o)?n.attribName+=o:A(n,"Invalid attribute name");continue;case E.ATTRIB_NAME_SAW_WHITE:if("="===o)n.state=E.ATTRIB_VALUE;else{if(w(a,o))continue;A(n,"Attribute without value"),n.tag.attributes[n.attribName]="",n.attribValue="",O(n,"onattribute",{name:n.attribName,value:""}),n.attribName="",">"===o?L(n):w(g,o)?(n.attribName=o,n.state=E.ATTRIB_NAME):(A(n,"Invalid attribute name"),n.state=E.ATTRIB)}continue;case E.ATTRIB_VALUE:if(w(a,o))continue;w(c,o)?(n.q=o,n.state=E.ATTRIB_VALUE_QUOTED):(A(n,"Unquoted attribute value"),n.state=E.ATTRIB_VALUE_UNQUOTED,n.attribValue=o);continue;case E.ATTRIB_VALUE_QUOTED:if(o!==n.q){"&"===o?n.state=E.ATTRIB_VALUE_ENTITY_Q:n.attribValue+=o;continue}k(n),n.q="",n.state=E.ATTRIB_VALUE_CLOSED;continue;case E.ATTRIB_VALUE_CLOSED:w(a,o)?n.state=E.ATTRIB:">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:w(g,o)?(A(n,"No whitespace between attributes"),n.attribName=o,n.attribValue="",n.state=E.ATTRIB_NAME):A(n,"Invalid attribute name");continue;case E.ATTRIB_VALUE_UNQUOTED:if(b(f,o)){"&"===o?n.state=E.ATTRIB_VALUE_ENTITY_U:n.attribValue+=o;continue}k(n),">"===o?L(n):n.state=E.ATTRIB;continue;case E.CLOSE_TAG:if(n.tagName)">"===o?j(n):w(m,o)?n.tagName+=o:n.script?(n.script+="</"+n.tagName,n.tagName="",n.state=E.SCRIPT):(b(a,o)&&A(n,"Invalid tagname in closing tag"),n.state=E.CLOSE_TAG_SAW_WHITE);else{if(w(a,o))continue;b(g,o)?n.script?(n.script+="</"+o,n.state=E.SCRIPT):A(n,"Invalid tagname in closing tag."):n.tagName=o}continue;case E.CLOSE_TAG_SAW_WHITE:if(w(a,o))continue;">"===o?j(n):A(n,"Invalid characters in closing tag");continue;case E.TEXT_ENTITY:case E.ATTRIB_VALUE_ENTITY_Q:case E.ATTRIB_VALUE_ENTITY_U:switch(n.state){case E.TEXT_ENTITY:var u=E.TEXT,p="textNode";break;case E.ATTRIB_VALUE_ENTITY_Q:u=E.ATTRIB_VALUE_QUOTED,p="attribValue";break;case E.ATTRIB_VALUE_ENTITY_U:u=E.ATTRIB_VALUE_UNQUOTED,p="attribValue"}";"===o?(n[p]+=F(n),n.entity="",n.state=u):w(l,o)?n.entity+=o:(A(n,"Invalid character entity"),n[p]+="&"+n.entity+o,n.entity="",n.state=u);continue;default:throw new Error(n,"Unknown state: "+n.state)}return n.position>=n.bufferCheckPosition&&function(r){for(var n=Math.max(t.MAX_BUFFER_LENGTH,10),i=0,o=0,s=e.length;o<s;o++){var a=r[e[o]].length;if(a>n)switch(e[o]){case"textNode":T(r);break;case"cdata":O(r,"oncdata",r.cdata),r.cdata="";break;case"script":O(r,"onscript",r.script),r.script="";break;default:N(r,"Max buffer length exceeded: "+e[o])}i=Math.max(i,a)}r.bufferCheckPosition=t.MAX_BUFFER_LENGTH-i+r.position}(n),n},resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){var t;T(t=this),""!==t.cdata&&(O(t,"oncdata",t.cdata),t.cdata=""),""!==t.script&&(O(t,"onscript",t.script),t.script="")}};try{var i=r(8166).Stream}catch(t){i=function(){}}var o=t.EVENTS.filter((function(t){return"error"!==t&&"end"!==t}));function s(t,e){if(!(this instanceof s))return new s(t,e);i.apply(this),this._parser=new n(t,e),this.writable=!0,this.readable=!0;var r=this;this._parser.onend=function(){r.emit("end")},this._parser.onerror=function(t){r.emit("error",t),r._parser.error=null},this._decoder=null,o.forEach((function(t){Object.defineProperty(r,"on"+t,{get:function(){return r._parser["on"+t]},set:function(e){if(!e)return r.removeAllListeners(t),r._parser["on"+t]=e;r.on(t,e)},enumerable:!0,configurable:!1})}))}s.prototype=Object.create(i.prototype,{constructor:{value:s}}),s.prototype.write=function(t){if("function"==typeof Buffer&&"function"==typeof Buffer.isBuffer&&Buffer.isBuffer(t)){if(!this._decoder){var e=r(8639).s;this._decoder=new e("utf8")}t=this._decoder.write(t)}return this._parser.write(t.toString()),this.emit("data",t),!0},s.prototype.end=function(t){return t&&t.length&&this.write(t),this._parser.end(),!0},s.prototype.on=function(t,e){var r=this;return r._parser["on"+t]||-1===o.indexOf(t)||(r._parser["on"+t]=function(){var e=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);e.splice(0,0,t),r.emit.apply(r,e)}),i.prototype.on.call(r,t,e)};var a="\r\n\t ",h="0124356789",u="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",c="'\"",l=h+u+"#",f=a+">",p="http://www.w3.org/XML/1998/namespace",d="http://www.w3.org/2000/xmlns/",y={xml:p,xmlns:d};a=v(a),h=v(h),u=v(u);var g=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,m=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/;function v(t){return t.split("").reduce((function(t,e){return t[e]=!0,t}),{})}function w(t,e){return function(t){return"[object RegExp]"===Object.prototype.toString.call(t)}(t)?!!e.match(t):t[e]}function b(t,e){return!w(t,e)}c=v(c),l=v(l),f=v(f);var M,_,x,E=0;for(var E in t.STATE={BEGIN:E++,TEXT:E++,TEXT_ENTITY:E++,OPEN_WAKA:E++,SGML_DECL:E++,SGML_DECL_QUOTED:E++,DOCTYPE:E++,DOCTYPE_QUOTED:E++,DOCTYPE_DTD:E++,DOCTYPE_DTD_QUOTED:E++,COMMENT_STARTING:E++,COMMENT:E++,COMMENT_ENDING:E++,COMMENT_ENDED:E++,CDATA:E++,CDATA_ENDING:E++,CDATA_ENDING_2:E++,PROC_INST:E++,PROC_INST_BODY:E++,PROC_INST_ENDING:E++,OPEN_TAG:E++,OPEN_TAG_SLASH:E++,ATTRIB:E++,ATTRIB_NAME:E++,ATTRIB_NAME_SAW_WHITE:E++,ATTRIB_VALUE:E++,ATTRIB_VALUE_QUOTED:E++,ATTRIB_VALUE_CLOSED:E++,ATTRIB_VALUE_UNQUOTED:E++,ATTRIB_VALUE_ENTITY_Q:E++,ATTRIB_VALUE_ENTITY_U:E++,CLOSE_TAG:E++,CLOSE_TAG_SAW_WHITE:E++,SCRIPT:E++,SCRIPT_ENDING:E++},t.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(t.ENTITIES).forEach((function(e){var r=t.ENTITIES[e],n="number"==typeof r?String.fromCharCode(r):r;t.ENTITIES[e]=n})),t.STATE)t.STATE[t.STATE[E]]=E;function S(t,e,r){t[e]&&t[e](r)}function O(t,e,r){t.textNode&&T(t),S(t,e,r)}function T(t){t.textNode=I(t.opt,t.textNode),t.textNode&&S(t,"ontext",t.textNode),t.textNode=""}function I(t,e){return t.trim&&(e=e.trim()),t.normalize&&(e=e.replace(/\s+/g," ")),e}function N(t,e){return T(t),t.trackPosition&&(e+="\nLine: "+t.line+"\nColumn: "+t.column+"\nChar: "+t.c),e=new Error(e),t.error=e,S(t,"onerror",e),t}function P(t){return t.closedRoot||A(t,"Unclosed root tag"),t.state!==E.BEGIN&&t.state!==E.TEXT&&N(t,"Unexpected end"),T(t),t.c="",t.closed=!0,S(t,"onend"),n.call(t,t.strict,t.opt),t}function A(t,e){if("object"!=typeof t||!(t instanceof n))throw new Error("bad call to strictFail");t.strict&&N(t,e)}function C(t){t.strict||(t.tagName=t.tagName[t.looseCase]());var e=t.tags[t.tags.length-1]||t,r=t.tag={name:t.tagName,attributes:{}};t.opt.xmlns&&(r.ns=e.ns),t.attribList.length=0}function D(t,e){var r=t.indexOf(":")<0?["",t]:t.split(":"),n=r[0],i=r[1];return e&&"xmlns"===t&&(n="xmlns",i=""),{prefix:n,local:i}}function k(t){if(t.strict||(t.attribName=t.attribName[t.looseCase]()),-1!==t.attribList.indexOf(t.attribName)||t.tag.attributes.hasOwnProperty(t.attribName))return t.attribName=t.attribValue="";if(t.opt.xmlns){var e=D(t.attribName,!0),r=e.prefix,n=e.local;if("xmlns"===r)if("xml"===n&&t.attribValue!==p)A(t,"xml: prefix must be bound to "+p+"\nActual: "+t.attribValue);else if("xmlns"===n&&t.attribValue!==d)A(t,"xmlns: prefix must be bound to "+d+"\nActual: "+t.attribValue);else{var i=t.tag,o=t.tags[t.tags.length-1]||t;i.ns===o.ns&&(i.ns=Object.create(o.ns)),i.ns[n]=t.attribValue}t.attribList.push([t.attribName,t.attribValue])}else t.tag.attributes[t.attribName]=t.attribValue,O(t,"onattribute",{name:t.attribName,value:t.attribValue});t.attribName=t.attribValue=""}function L(t,e){if(t.opt.xmlns){var r=t.tag,n=D(t.tagName);r.prefix=n.prefix,r.local=n.local,r.uri=r.ns[n.prefix]||"",r.prefix&&!r.uri&&(A(t,"Unbound namespace prefix: "+JSON.stringify(t.tagName)),r.uri=n.prefix);var i=t.tags[t.tags.length-1]||t;r.ns&&i.ns!==r.ns&&Object.keys(r.ns).forEach((function(e){O(t,"onopennamespace",{prefix:e,uri:r.ns[e]})}));for(var o=0,s=t.attribList.length;o<s;o++){var a=t.attribList[o],h=a[0],u=a[1],c=D(h,!0),l=c.prefix,f=c.local,p=""==l?"":r.ns[l]||"",d={name:h,value:u,prefix:l,local:f,uri:p};l&&"xmlns"!=l&&!p&&(A(t,"Unbound namespace prefix: "+JSON.stringify(l)),d.uri=l),t.tag.attributes[h]=d,O(t,"onattribute",d)}t.attribList.length=0}t.tag.isSelfClosing=!!e,t.sawRoot=!0,t.tags.push(t.tag),O(t,"onopentag",t.tag),e||(t.noscript||"script"!==t.tagName.toLowerCase()?t.state=E.TEXT:t.state=E.SCRIPT,t.tag=null,t.tagName=""),t.attribName=t.attribValue="",t.attribList.length=0}function j(t){if(!t.tagName)return A(t,"Weird empty close tag."),t.textNode+="</>",void(t.state=E.TEXT);if(t.script){if("script"!==t.tagName)return t.script+="</"+t.tagName+">",t.tagName="",void(t.state=E.SCRIPT);O(t,"onscript",t.script),t.script=""}var e=t.tags.length,r=t.tagName;t.strict||(r=r[t.looseCase]());for(var n=r;e--&&t.tags[e].name!==n;)A(t,"Unexpected close tag");if(e<0)return A(t,"Unmatched closing tag: "+t.tagName),t.textNode+="</"+t.tagName+">",void(t.state=E.TEXT);t.tagName=r;for(var i=t.tags.length;i-- >e;){var o=t.tag=t.tags.pop();t.tagName=t.tag.name,O(t,"onclosetag",t.tagName);var s={};for(var a in o.ns)s[a]=o.ns[a];var h=t.tags[t.tags.length-1]||t;t.opt.xmlns&&o.ns!==h.ns&&Object.keys(o.ns).forEach((function(e){var r=o.ns[e];O(t,"onclosenamespace",{prefix:e,uri:r})}))}0===e&&(t.closedRoot=!0),t.tagName=t.attribValue=t.attribName="",t.attribList.length=0,t.state=E.TEXT}function F(t){var e,r=t.entity,n=r.toLowerCase(),i="";return t.ENTITIES[r]?t.ENTITIES[r]:t.ENTITIES[n]?t.ENTITIES[n]:("#"===(r=n).charAt(0)&&("x"===r.charAt(1)?(r=r.slice(2),i=(e=parseInt(r,16)).toString(16)):(r=r.slice(1),i=(e=parseInt(r,10)).toString(10))),r=r.replace(/^0+/,""),i.toLowerCase()!==r?(A(t,"Invalid character entity"),"&"+t.entity+";"):String.fromCodePoint(e))}E=t.STATE,String.fromCodePoint||(M=String.fromCharCode,_=Math.floor,x=function(){var t,e,r=16384,n=[],i=-1,o=arguments.length;if(!o)return"";for(var s="";++i<o;){var a=Number(arguments[i]);if(!isFinite(a)||a<0||a>1114111||_(a)!=a)throw RangeError("Invalid code point: "+a);a<=65535?n.push(a):(t=55296+((a-=65536)>>10),e=a%1024+56320,n.push(t,e)),(i+1==o||n.length>r)&&(s+=M.apply(null,n),n.length=0)}return s},Object.defineProperty?Object.defineProperty(String,"fromCodePoint",{value:x,configurable:!0,writable:!0}):String.fromCodePoint=x)}(e)},8166:(t,e,r)=>{var n=r(1836);function i(){n.call(this)}i.prototype=new n,t.exports=i,i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function n(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function i(){r.readable&&r.resume&&r.resume()}r.on("data",n),t.on("drain",i),t._isStdio||e&&!1===e.end||(r.on("end",s),r.on("close",a));var o=!1;function s(){o||(o=!0,t.end())}function a(){o||(o=!0,"function"==typeof t.destroy&&t.destroy())}function h(t){if(u(),!this.hasListeners("error"))throw t}function u(){r.off("data",n),t.off("drain",i),r.off("end",s),r.off("close",a),r.off("error",h),t.off("error",h),r.off("end",u),r.off("close",u),t.off("end",u),t.off("close",u)}return r.on("error",h),t.on("error",h),r.on("end",u),r.on("close",u),t.on("end",u),t.on("close",u),t.emit("pipe",r),t}},8639:(t,e,r)=>{"use strict";var n=r(5538).Buffer,i=n.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=h,this.end=u,e=4;break;case"utf8":this.fillLast=a,e=4;break;case"base64":this.text=c,this.end=l,e=3;break;default:return this.write=f,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function s(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function a(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"<22>";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"<22>";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"<22>"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function h(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function c(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function l(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function f(t){return t.toString(this.encoding)}function p(t){return t&&t.length?this.write(t):""}e.s=o,o.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r<t.length?e?e+this.text(t,r):this.text(t,r):e||""},o.prototype.end=function(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"<22>":e},o.prototype.text=function(t,e){var r=function(t,e,r){var n=e.length-1;if(n<r)return 0;var i=s(e[n]);return i>=0?(i>0&&(t.lastNeed=i-1),i):--n<r||-2===i?0:(i=s(e[n]))>=0?(i>0&&(t.lastNeed=i-2),i):--n<r||-2===i?0:(i=s(e[n]))>=0?(i>0&&(2===i?i=0:t.lastNeed=i-3),i):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString("utf8",e,n)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},5538:(t,e,r)=>{var n=r(1666),i=n.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function s(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,e),e.Buffer=s),o(i,s),s.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,r)},s.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var n=i(t);return void 0!==e?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}},1348:(t,e)=>{var r={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5};for(var n in r)"millisecond"===n?r.ms=r[n]:r[n.charAt(0)]=r[n],r[n+"s"]=r[n];function i(t){this.count=0;var e=function(t){var e=t.match(o);return e&&r[e[2]]?e.slice(1):null}(t);e&&(this.time=Number(e[0])*r[e[1]],this.type=e[1])}i.prototype.do=function(t){this.time&&(this.interval=setInterval((function(){e.count++,t.call(e)}),this.time));var e=this;return this},i.prototype.stop=function(){return this.interval&&(clearInterval(this.interval),delete this.interval),this};var o=/^\s*(\d+(?:\.\d+)?)\s*([a-z]+)\s*$/},8964:function(t,e){(function(){"use strict";e.stripBOM=function(t){return"\ufeff"===t[0]?t.substring(1):t}}).call(this)},8888:function(t,e,r){(function(){"use strict";var t,n,i,o,s,a={}.hasOwnProperty;t=r(122),n=r(1574).defaults,o=function(t){return"string"==typeof t&&(t.indexOf("&")>=0||t.indexOf(">")>=0||t.indexOf("<")>=0)},s=function(t){return"<![CDATA["+i(t)+"]]>"},i=function(t){return t.replace("]]>","]]]]><![CDATA[>")},e.Builder=function(){function e(t){var e,r,i;for(e in this.options={},r=n[.2])a.call(r,e)&&(i=r[e],this.options[e]=i);for(e in t)a.call(t,e)&&(i=t[e],this.options[e]=i)}return e.prototype.buildObject=function(e){var r,i,h,u,c,l;return r=this.options.attrkey,i=this.options.charkey,1===Object.keys(e).length&&this.options.rootName===n[.2].rootName?e=e[c=Object.keys(e)[0]]:c=this.options.rootName,l=this,h=function(t,e){var n,u,c,f,p,d;if("object"!=typeof e)l.options.cdata&&o(e)?t.raw(s(e)):t.txt(e);else if(Array.isArray(e)){for(f in e)if(a.call(e,f))for(p in u=e[f])c=u[p],t=h(t.ele(p),c).up()}else for(p in e)if(a.call(e,p))if(u=e[p],p===r){if("object"==typeof u)for(n in u)d=u[n],t=t.att(n,d)}else if(p===i)t=l.options.cdata&&o(u)?t.raw(s(u)):t.txt(u);else if(Array.isArray(u))for(f in u)a.call(u,f)&&(t="string"==typeof(c=u[f])?l.options.cdata&&o(c)?t.ele(p).raw(s(c)).up():t.ele(p,c).up():h(t.ele(p),c).up());else"object"==typeof u?t=h(t.ele(p),u).up():"string"==typeof u&&l.options.cdata&&o(u)?t=t.ele(p).raw(s(u)).up():(null==u&&(u=""),t=t.ele(p,u.toString()).up());return t},u=t.create(c,this.options.xmldec,this.options.doctype,{headless:this.options.headless,allowSurrogateChars:this.options.allowSurrogateChars}),h(u,e).end(this.options.renderOpts)},e}()}).call(this)},1574:function(t,e){(function(){e.defaults={.1:{explicitCharkey:!1,trim:!0,normalize:!0,normalizeTags:!1,attrkey:"@",charkey:"#",explicitArray:!1,ignoreAttrs:!1,mergeAttrs:!1,explicitRoot:!1,validator:null,xmlns:!1,explicitChildren:!1,childkey:"@@",charsAsChildren:!1,includeWhiteChars:!1,async:!1,strict:!0,attrNameProcessors:null,attrValueProcessors:null,tagNameProcessors:null,valueProcessors:null,emptyTag:""},.2:{explicitCharkey:!1,trim:!1,normalize:!1,normalizeTags:!1,attrkey:"$",charkey:"_",explicitArray:!0,ignoreAttrs:!1,mergeAttrs:!1,explicitRoot:!0,validator:null,xmlns:!1,explicitChildren:!1,preserveChildrenOrder:!1,childkey:"$$",charsAsChildren:!1,includeWhiteChars:!1,async:!1,strict:!0,attrNameProcessors:null,attrValueProcessors:null,tagNameProcessors:null,valueProcessors:null,rootName:"root",xmldec:{version:"1.0",encoding:"UTF-8",standalone:!0},doctype:null,renderOpts:{pretty:!0,indent:" ",newline:"\n"},headless:!1,chunkSize:1e4,emptyTag:"",cdata:!1}}}).call(this)},9767:function(t,e,r){(function(){"use strict";var t,n,i,o,s,a,h,u,c=function(t,e){return function(){return t.apply(e,arguments)}},l={}.hasOwnProperty;h=r(2526),i=r(1581),t=r(8964),a=r(4774),u=r(1348).setImmediate,n=r(1574).defaults,o=function(t){return"object"==typeof t&&null!=t&&0===Object.keys(t).length},s=function(t,e,r){var n,i;for(n=0,i=t.length;n<i;n++)e=(0,t[n])(e,r);return e},e.Parser=function(r){function i(t){var r,i,o;if(this.parseStringPromise=c(this.parseStringPromise,this),this.parseString=c(this.parseString,this),this.reset=c(this.reset,this),this.assignOrPush=c(this.assignOrPush,this),this.processAsync=c(this.processAsync,this),!(this instanceof e.Parser))return new e.Parser(t);for(r in this.options={},i=n[.2])l.call(i,r)&&(o=i[r],this.options[r]=o);for(r in t)l.call(t,r)&&(o=t[r],this.options[r]=o);this.options.xmlns&&(this.options.xmlnskey=this.options.attrkey+"ns"),this.options.normalizeTags&&(this.options.tagNameProcessors||(this.options.tagNameProcessors=[]),this.options.tagNameProcessors.unshift(a.normalize)),this.reset()}return function(t,e){for(var r in e)l.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(i,r),i.prototype.processAsync=function(){var t,e;try{return this.remaining.length<=this.options.chunkSize?(t=this.remaining,this.remaining="",this.saxParser=this.saxParser.write(t),this.saxParser.close()):(t=this.remaining.substr(0,this.options.chunkSize),this.remaining=this.remaining.substr(this.options.chunkSize,this.remaining.length),this.saxParser=this.saxParser.write(t),u(this.processAsync))}catch(t){if(e=t,!this.saxParser.errThrown)return this.saxParser.errThrown=!0,this.emit(e)}},i.prototype.assignOrPush=function(t,e,r){return e in t?(t[e]instanceof Array||(t[e]=[t[e]]),t[e].push(r)):this.options.explicitArray?t[e]=[r]:t[e]=r},i.prototype.reset=function(){var t,e,r,n,i;return this.removeAllListeners(),this.saxParser=h.parser(this.options.strict,{trim:!1,normalize:!1,xmlns:this.options.xmlns}),this.saxParser.errThrown=!1,this.saxParser.onerror=(i=this,function(t){if(i.saxParser.resume(),!i.saxParser.errThrown)return i.saxParser.errThrown=!0,i.emit("error",t)}),this.saxParser.onend=function(t){return function(){if(!t.saxParser.ended)return t.saxParser.ended=!0,t.emit("end",t.resultObject)}}(this),this.saxParser.ended=!1,this.EXPLICIT_CHARKEY=this.options.explicitCharkey,this.resultObject=null,n=[],t=this.options.attrkey,e=this.options.charkey,this.saxParser.onopentag=function(r){return function(i){var o,a,h,u,c;if((h={})[e]="",!r.options.ignoreAttrs)for(o in c=i.attributes)l.call(c,o)&&(t in h||r.options.mergeAttrs||(h[t]={}),a=r.options.attrValueProcessors?s(r.options.attrValueProcessors,i.attributes[o],o):i.attributes[o],u=r.options.attrNameProcessors?s(r.options.attrNameProcessors,o):o,r.options.mergeAttrs?r.assignOrPush(h,u,a):h[t][u]=a);return h["#name"]=r.options.tagNameProcessors?s(r.options.tagNameProcessors,i.name):i.name,r.options.xmlns&&(h[r.options.xmlnskey]={uri:i.uri,local:i.local}),n.push(h)}}(this),this.saxParser.onclosetag=function(t){return function(){var r,i,a,h,u,c,f,p,d,y;if(c=n.pop(),u=c["#name"],t.options.explicitChildren&&t.options.preserveChildrenOrder||delete c["#name"],!0===c.cdata&&(r=c.cdata,delete c.cdata),d=n[n.length-1],c[e].match(/^\s*$/)&&!r?(i=c[e],delete c[e]):(t.options.trim&&(c[e]=c[e].trim()),t.options.normalize&&(c[e]=c[e].replace(/\s{2,}/g," ").trim()),c[e]=t.options.valueProcessors?s(t.options.valueProcessors,c[e],u):c[e],1===Object.keys(c).length&&e in c&&!t.EXPLICIT_CHARKEY&&(c=c[e])),o(c)&&(c=""!==t.options.emptyTag?t.options.emptyTag:i),null!=t.options.validator&&(y="/"+function(){var t,e,r;for(r=[],t=0,e=n.length;t<e;t++)h=n[t],r.push(h["#name"]);return r}().concat(u).join("/"),function(){var e;try{c=t.options.validator(y,d&&d[u],c)}catch(r){return e=r,t.emit("error",e)}}()),t.options.explicitChildren&&!t.options.mergeAttrs&&"object"==typeof c)if(t.options.preserveChildrenOrder){if(d){for(a in d[t.options.childkey]=d[t.options.childkey]||[],f={},c)l.call(c,a)&&(f[a]=c[a]);d[t.options.childkey].push(f),delete c["#name"],1===Object.keys(c).length&&e in c&&!t.EXPLICIT_CHARKEY&&(c=c[e])}}else h={},t.options.attrkey in c&&(h[t.options.attrkey]=c[t.options.attrkey],delete c[t.options.attrkey]),!t.options.charsAsChildren&&t.options.charkey in c&&(h[t.options.charkey]=c[t.options.charkey],delete c[t.options.charkey]),Object.getOwnPropertyNames(c).length>0&&(h[t.options.childkey]=c),c=h;return n.length>0?t.assignOrPush(d,u,c):(t.options.explicitRoot&&(p=c,(c={})[u]=p),t.resultObject=c,t.saxParser.ended=!0,t.emit("end",t.resultObject))}}(this),r=function(t){return function(r){var i,o;if(o=n[n.length-1])return o[e]+=r,t.options.explicitChildren&&t.options.preserveChildrenOrder&&t.options.charsAsChildren&&(t.options.includeWhiteChars||""!==r.replace(/\\n/g,"").trim())&&(o[t.options.childkey]=o[t.options.childkey]||[],(i={"#name":"__text__"})[e]=r,t.options.normalize&&(i[e]=i[e].replace(/\s{2,}/g," ").trim()),o[t.options.childkey].push(i)),o}}(this),this.saxParser.ontext=r,this.saxParser.oncdata=function(t){var e;if(e=r(t))return e.cdata=!0}},i.prototype.parseString=function(e,r){var n;null!=r&&"function"==typeof r&&(this.on("end",(function(t){return this.reset(),r(null,t)})),this.on("error",(function(t){return this.reset(),r(t)})));try{return""===(e=e.toString()).trim()?(this.emit("end",null),!0):(e=t.stripBOM(e),this.options.async?(this.remaining=e,u(this.processAsync),this.saxParser):this.saxParser.write(e).close())}catch(t){if(n=t,!this.saxParser.errThrown&&!this.saxParser.ended)return this.emit("error",n),this.saxParser.errThrown=!0;if(this.saxParser.ended)throw n}},i.prototype.parseStringPromise=function(t){return new Promise((e=this,function(r,n){return e.parseString(t,(function(t,e){return t?n(t):r(e)}))}));var e},i}(i),e.parseString=function(t,r,n){var i,o;return null!=n?("function"==typeof n&&(i=n),"object"==typeof r&&(o=r)):("function"==typeof r&&(i=r),o={}),new e.Parser(o).parseString(t,i)},e.parseStringPromise=function(t,r){var n;return"object"==typeof r&&(n=r),new e.Parser(n).parseStringPromise(t)}}).call(this)},4774:function(t,e){(function(){"use strict";var t;t=new RegExp(/(?!xmlns)^.*:/),e.normalize=function(t){return t.toLowerCase()},e.firstCharLowerCase=function(t){return t.charAt(0).toLowerCase()+t.slice(1)},e.stripPrefix=function(e){return e.replace(t,"")},e.parseNumbers=function(t){return isNaN(t)||(t=t%1==0?parseInt(t,10):parseFloat(t)),t},e.parseBooleans=function(t){return/^(?:true|false)$/i.test(t)&&(t="true"===t.toLowerCase()),t}}).call(this)},7913:function(t,e,r){(function(){"use strict";var t,n,i,o,s={}.hasOwnProperty;n=r(1574),t=r(8888),i=r(9767),o=r(4774),e.defaults=n.defaults,e.processors=o,e.ValidationError=function(t){function e(t){this.message=t}return function(t,e){for(var r in e)s.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(e,Error),e}(),e.Builder=t.Builder,e.Parser=i.Parser,e.parseString=i.parseString,e.parseStringPromise=i.parseStringPromise}).call(this)},7143:function(t){(function(){t.exports={Disconnected:1,Preceding:2,Following:4,Contains:8,ContainedBy:16,ImplementationSpecific:32}}).call(this)},5165:function(t){(function(){t.exports={Element:1,Attribute:2,Text:3,CData:4,EntityReference:5,EntityDeclaration:6,ProcessingInstruction:7,Comment:8,Document:9,DocType:10,DocumentFragment:11,NotationDeclaration:12,Declaration:201,Raw:202,AttributeDeclaration:203,ElementDeclaration:204,Dummy:205}}).call(this)},2045:function(t){(function(){var e,r,n,i,o,s,a,h=[].slice,u={}.hasOwnProperty;e=function(){var t,e,r,n,i,s;if(s=arguments[0],i=2<=arguments.length?h.call(arguments,1):[],o(Object.assign))Object.assign.apply(null,arguments);else for(t=0,r=i.length;t<r;t++)if(null!=(n=i[t]))for(e in n)u.call(n,e)&&(s[e]=n[e]);return s},o=function(t){return!!t&&"[object Function]"===Object.prototype.toString.call(t)},s=function(t){var e;return!!t&&("function"==(e=typeof t)||"object"===e)},n=function(t){return o(Array.isArray)?Array.isArray(t):"[object Array]"===Object.prototype.toString.call(t)},i=function(t){var e;if(n(t))return!t.length;for(e in t)if(u.call(t,e))return!1;return!0},a=function(t){var e,r;return s(t)&&(r=Object.getPrototypeOf(t))&&(e=r.constructor)&&"function"==typeof e&&e instanceof e&&Function.prototype.toString.call(e)===Function.prototype.toString.call(Object)},r=function(t){return o(t.valueOf)?t.valueOf():t},t.exports.assign=e,t.exports.isFunction=o,t.exports.isObject=s,t.exports.isArray=n,t.exports.isEmpty=i,t.exports.isPlainObject=a,t.exports.getValue=r}).call(this)},8203:function(t){(function(){t.exports={None:0,OpenTag:1,InsideTag:2,CloseTag:3}}).call(this)},4703:function(t,e,r){(function(){var e;e=r(5165),r(6055),t.exports=function(){function t(t,r,n){if(this.parent=t,this.parent&&(this.options=this.parent.options,this.stringify=this.parent.stringify),null==r)throw new Error("Missing attribute name. "+this.debugInfo(r));this.name=this.stringify.name(r),this.value=this.stringify.attValue(n),this.type=e.Attribute,this.isId=!1,this.schemaTypeInfo=null}return Object.defineProperty(t.prototype,"nodeType",{get:function(){return this.type}}),Object.defineProperty(t.prototype,"ownerElement",{get:function(){return this.parent}}),Object.defineProperty(t.prototype,"textContent",{get:function(){return this.value},set:function(t){return this.value=t||""}}),Object.defineProperty(t.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(t.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(t.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(t.prototype,"specified",{get:function(){return!0}}),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(t){return this.options.writer.attribute(this,this.options.writer.filterOptions(t))},t.prototype.debugInfo=function(t){return null==(t=t||this.name)?"parent: <"+this.parent.name+">":"attribute: {"+t+"}, parent: <"+this.parent.name+">"},t.prototype.isEqualNode=function(t){return t.namespaceURI===this.namespaceURI&&t.prefix===this.prefix&&t.localName===this.localName&&t.value===this.value},t}()}).call(this)},669:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(4791),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing CDATA text. "+this.debugInfo());this.name="#cdata-section",this.type=e.CData,this.value=this.stringify.cdata(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.cdata(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},4791:function(t,e,r){(function(){var e,n={}.hasOwnProperty;e=r(6055),t.exports=function(t){function e(t){e.__super__.constructor.call(this,t),this.value=""}return function(t,e){for(var r in e)n.call(e,r)&&(t[r]=e[r]);function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype}(e,t),Object.defineProperty(e.prototype,"data",{get:function(){return this.value},set:function(t){return this.value=t||""}}),Object.defineProperty(e.prototype,"length",{get:function(){return this.value.length}}),Object.defineProperty(e.prototype,"textContent",{get:function(){return this.value},set:function(t){return this.value=t||""}}),e.prototype.clone=function(){return Object.create(this)},e.prototype.substringData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.appendData=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.insertData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.deleteData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.replaceData=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.isEqualNode=function(t){return!!e.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.data===this.data},e}(e)}).call(this)},445:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(4791),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing comment text. "+this.debugInfo());this.name="#comment",this.type=e.Comment,this.value=this.stringify.comment(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.comment(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},8824:function(t,e,r){(function(){var e,n;e=r(1826),n=r(2265),t.exports=function(){function t(){this.defaultParams={"canonical-form":!1,"cdata-sections":!1,comments:!1,"datatype-normalization":!1,"element-content-whitespace":!0,entities:!0,"error-handler":new e,infoset:!0,"validate-if-schema":!1,namespaces:!0,"namespace-declarations":!0,"normalize-characters":!1,"schema-location":"","schema-type":"","split-cdata-sections":!0,validate:!1,"well-formed":!0},this.params=Object.create(this.defaultParams)}return Object.defineProperty(t.prototype,"parameterNames",{get:function(){return new n(Object.keys(this.defaultParams))}}),t.prototype.getParameter=function(t){return this.params.hasOwnProperty(t)?this.params[t]:null},t.prototype.canSetParameter=function(t,e){return!0},t.prototype.setParameter=function(t,e){return null!=e?this.params[t]=e:delete this.params[t]},t}()}).call(this)},1826:function(t){(function(){t.exports=function(){function t(){}return t.prototype.handleError=function(t){throw new Error(t)},t}()}).call(this)},344:function(t){(function(){t.exports=function(){function t(){}return t.prototype.hasFeature=function(t,e){return!0},t.prototype.createDocumentType=function(t,e,r){throw new Error("This DOM method is not implemented.")},t.prototype.createDocument=function(t,e,r){throw new Error("This DOM method is not implemented.")},t.prototype.createHTMLDocument=function(t){throw new Error("This DOM method is not implemented.")},t.prototype.getFeature=function(t,e){throw new Error("This DOM method is not implemented.")},t}()}).call(this)},2265:function(t){(function(){t.exports=function(){function t(t){this.arr=t||[]}return Object.defineProperty(t.prototype,"length",{get:function(){return this.arr.length}}),t.prototype.item=function(t){return this.arr[t]||null},t.prototype.contains=function(t){return-1!==this.arr.indexOf(t)},t}()}).call(this)},76:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,i,o,s,a){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());if(null==i)throw new Error("Missing DTD attribute name. "+this.debugInfo(n));if(!o)throw new Error("Missing DTD attribute type. "+this.debugInfo(n));if(!s)throw new Error("Missing DTD attribute default. "+this.debugInfo(n));if(0!==s.indexOf("#")&&(s="#"+s),!s.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/))throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. "+this.debugInfo(n));if(a&&!s.match(/^(#FIXED|#DEFAULT)$/))throw new Error("Default value only applies to #FIXED or #DEFAULT. "+this.debugInfo(n));this.elementName=this.stringify.name(n),this.type=e.AttributeDeclaration,this.attributeName=this.stringify.name(i),this.attributeType=this.stringify.dtdAttType(o),a&&(this.defaultValue=this.stringify.dtdAttDefault(a)),this.defaultValueType=s}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.dtdAttList(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},9838:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());i||(i="(#PCDATA)"),Array.isArray(i)&&(i="("+i.join(",")+")"),this.name=this.stringify.name(n),this.type=e.ElementDeclaration,this.value=this.stringify.dtdElementValue(i)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.dtdElement(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},9134:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(2045).isObject,n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,o,s){if(r.__super__.constructor.call(this,t),null==o)throw new Error("Missing DTD entity name. "+this.debugInfo(o));if(null==s)throw new Error("Missing DTD entity value. "+this.debugInfo(o));if(this.pe=!!n,this.name=this.stringify.name(o),this.type=e.EntityDeclaration,i(s)){if(!s.pubID&&!s.sysID)throw new Error("Public and/or system identifiers are required for an external entity. "+this.debugInfo(o));if(s.pubID&&!s.sysID)throw new Error("System identifier is required for a public external entity. "+this.debugInfo(o));if(this.internal=!1,null!=s.pubID&&(this.pubID=this.stringify.dtdPubID(s.pubID)),null!=s.sysID&&(this.sysID=this.stringify.dtdSysID(s.sysID)),null!=s.nData&&(this.nData=this.stringify.dtdNData(s.nData)),this.pe&&this.nData)throw new Error("Notation declaration is not allowed in a parameter entity. "+this.debugInfo(o))}else this.value=this.stringify.dtdEntityValue(s),this.internal=!0}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),Object.defineProperty(r.prototype,"notationName",{get:function(){return this.nData||null}}),Object.defineProperty(r.prototype,"inputEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"xmlEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"xmlVersion",{get:function(){return null}}),r.prototype.toString=function(t){return this.options.writer.dtdEntity(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},8389:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD notation name. "+this.debugInfo(n));if(!i.pubID&&!i.sysID)throw new Error("Public or system identifiers are required for an external entity. "+this.debugInfo(n));this.name=this.stringify.name(n),this.type=e.NotationDeclaration,null!=i.pubID&&(this.pubID=this.stringify.dtdPubID(i.pubID)),null!=i.sysID&&(this.sysID=this.stringify.dtdSysID(i.sysID))}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),r.prototype.toString=function(t){return this.options.writer.dtdNotation(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},352:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(2045).isObject,n=r(6055),e=r(5165),t.exports=function(t){function r(t,n,o,s){var a;r.__super__.constructor.call(this,t),i(n)&&(n=(a=n).version,o=a.encoding,s=a.standalone),n||(n="1.0"),this.type=e.Declaration,this.version=this.stringify.xmlVersion(n),null!=o&&(this.encoding=this.stringify.xmlEncoding(o)),null!=s&&(this.standalone=this.stringify.xmlStandalone(s))}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.declaration(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},9762:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c={}.hasOwnProperty;u=r(2045).isObject,h=r(6055),e=r(5165),n=r(76),o=r(9134),i=r(9838),s=r(8389),a=r(2097),t.exports=function(t){function r(t,n,i){var o,s,a,h,c,l;if(r.__super__.constructor.call(this,t),this.type=e.DocType,t.children)for(s=0,a=(h=t.children).length;s<a;s++)if((o=h[s]).type===e.Element){this.name=o.name;break}this.documentObject=t,u(n)&&(n=(c=n).pubID,i=c.sysID),null==i&&(i=(l=[n,i])[0],n=l[1]),null!=n&&(this.pubID=this.stringify.dtdPubID(n)),null!=i&&(this.sysID=this.stringify.dtdSysID(i))}return function(t,e){for(var r in e)c.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"entities",{get:function(){var t,r,n,i,o;for(i={},r=0,n=(o=this.children).length;r<n;r++)(t=o[r]).type!==e.EntityDeclaration||t.pe||(i[t.name]=t);return new a(i)}}),Object.defineProperty(r.prototype,"notations",{get:function(){var t,r,n,i,o;for(i={},r=0,n=(o=this.children).length;r<n;r++)(t=o[r]).type===e.NotationDeclaration&&(i[t.name]=t);return new a(i)}}),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),Object.defineProperty(r.prototype,"internalSubset",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),r.prototype.element=function(t,e){var r;return r=new i(this,t,e),this.children.push(r),this},r.prototype.attList=function(t,e,r,i,o){var s;return s=new n(this,t,e,r,i,o),this.children.push(s),this},r.prototype.entity=function(t,e){var r;return r=new o(this,!1,t,e),this.children.push(r),this},r.prototype.pEntity=function(t,e){var r;return r=new o(this,!0,t,e),this.children.push(r),this},r.prototype.notation=function(t,e){var r;return r=new s(this,t,e),this.children.push(r),this},r.prototype.toString=function(t){return this.options.writer.docType(this,this.options.writer.filterOptions(t))},r.prototype.ele=function(t,e){return this.element(t,e)},r.prototype.att=function(t,e,r,n,i){return this.attList(t,e,r,n,i)},r.prototype.ent=function(t,e){return this.entity(t,e)},r.prototype.pent=function(t,e){return this.pEntity(t,e)},r.prototype.not=function(t,e){return this.notation(t,e)},r.prototype.up=function(){return this.root()||this.documentObject},r.prototype.isEqualNode=function(t){return!!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.name===this.name&&t.publicId===this.publicId&&t.systemId===this.systemId},r}(h)}).call(this)},1626:function(t,e,r){(function(){var e,n,i,o,s,a,h,u={}.hasOwnProperty;h=r(2045).isPlainObject,i=r(344),n=r(8824),o=r(6055),e=r(5165),a=r(9910),s=r(8766),t.exports=function(t){function r(t){r.__super__.constructor.call(this,null),this.name="#document",this.type=e.Document,this.documentURI=null,this.domConfig=new n,t||(t={}),t.writer||(t.writer=new s),this.options=t,this.stringify=new a(t)}return function(t,e){for(var r in e)u.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"implementation",{value:new i}),Object.defineProperty(r.prototype,"doctype",{get:function(){var t,r,n,i;for(r=0,n=(i=this.children).length;r<n;r++)if((t=i[r]).type===e.DocType)return t;return null}}),Object.defineProperty(r.prototype,"documentElement",{get:function(){return this.rootObject||null}}),Object.defineProperty(r.prototype,"inputEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"strictErrorChecking",{get:function(){return!1}}),Object.defineProperty(r.prototype,"xmlEncoding",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration?this.children[0].encoding:null}}),Object.defineProperty(r.prototype,"xmlStandalone",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration&&"yes"===this.children[0].standalone}}),Object.defineProperty(r.prototype,"xmlVersion",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration?this.children[0].version:"1.0"}}),Object.defineProperty(r.prototype,"URL",{get:function(){return this.documentURI}}),Object.defineProperty(r.prototype,"origin",{get:function(){return null}}),Object.defineProperty(r.prototype,"compatMode",{get:function(){return null}}),Object.defineProperty(r.prototype,"characterSet",{get:function(){return null}}),Object.defineProperty(r.prototype,"contentType",{get:function(){return null}}),r.prototype.end=function(t){var e;return e={},t?h(t)&&(e=t,t=this.options.writer):t=this.options.writer,t.document(this,t.filterOptions(e))},r.prototype.toString=function(t){return this.options.writer.document(this,this.options.writer.filterOptions(t))},r.prototype.createElement=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createDocumentFragment=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createTextNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createComment=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createCDATASection=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createProcessingInstruction=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createAttribute=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createEntityReference=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.importNode=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createElementNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementById=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.adoptNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.normalizeDocument=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.renameNode=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByClassName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createEvent=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createRange=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createNodeIterator=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createTreeWalker=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r}(o)}).call(this)},7535:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S={}.hasOwnProperty;E=r(2045),_=E.isObject,M=E.isFunction,x=E.isPlainObject,b=E.getValue,e=r(5165),p=r(1626),d=r(7341),o=r(669),s=r(445),g=r(2061),w=r(1419),y=r(1757),l=r(352),f=r(9762),a=r(76),u=r(9134),h=r(9838),c=r(8389),i=r(4703),v=r(9910),m=r(8766),n=r(8203),t.exports=function(){function t(t,r,n){var i;this.name="?xml",this.type=e.Document,t||(t={}),i={},t.writer?x(t.writer)&&(i=t.writer,t.writer=new m):t.writer=new m,this.options=t,this.writer=t.writer,this.writerOptions=this.writer.filterOptions(i),this.stringify=new v(t),this.onDataCallback=r||function(){},this.onEndCallback=n||function(){},this.currentNode=null,this.currentLevel=-1,this.openTags={},this.documentStarted=!1,this.documentCompleted=!1,this.root=null}return t.prototype.createChildNode=function(t){var r,n,i,o,s,a,h,u;switch(t.type){case e.CData:this.cdata(t.value);break;case e.Comment:this.comment(t.value);break;case e.Element:for(n in i={},h=t.attribs)S.call(h,n)&&(r=h[n],i[n]=r.value);this.node(t.name,i);break;case e.Dummy:this.dummy();break;case e.Raw:this.raw(t.value);break;case e.Text:this.text(t.value);break;case e.ProcessingInstruction:this.instruction(t.target,t.value);break;default:throw new Error("This XML node type is not supported in a JS object: "+t.constructor.name)}for(s=0,a=(u=t.children).length;s<a;s++)o=u[s],this.createChildNode(o),o.type===e.Element&&this.up();return this},t.prototype.dummy=function(){return this},t.prototype.node=function(t,e,r){var n;if(null==t)throw new Error("Missing node name.");if(this.root&&-1===this.currentLevel)throw new Error("Document can only have one root node. "+this.debugInfo(t));return this.openCurrent(),t=b(t),null==e&&(e={}),e=b(e),_(e)||(r=(n=[e,r])[0],e=n[1]),this.currentNode=new d(this,t,e),this.currentNode.children=!1,this.currentLevel++,this.openTags[this.currentLevel]=this.currentNode,null!=r&&this.text(r),this},t.prototype.element=function(t,r,n){var i,o,s,a,h,u;if(this.currentNode&&this.currentNode.type===e.DocType)this.dtdElement.apply(this,arguments);else if(Array.isArray(t)||_(t)||M(t))for(a=this.options.noValidation,this.options.noValidation=!0,(u=new p(this.options).element("TEMP_ROOT")).element(t),this.options.noValidation=a,o=0,s=(h=u.children).length;o<s;o++)i=h[o],this.createChildNode(i),i.type===e.Element&&this.up();else this.node(t,r,n);return this},t.prototype.attribute=function(t,e){var r,n;if(!this.currentNode||this.currentNode.children)throw new Error("att() can only be used immediately after an ele() call in callback mode. "+this.debugInfo(t));if(null!=t&&(t=b(t)),_(t))for(r in t)S.call(t,r)&&(n=t[r],this.attribute(r,n));else M(e)&&(e=e.apply()),this.options.keepNullAttributes&&null==e?this.currentNode.attribs[t]=new i(this,t,""):null!=e&&(this.currentNode.attribs[t]=new i(this,t,e));return this},t.prototype.text=function(t){var e;return this.openCurrent(),e=new w(this,t),this.onData(this.writer.text(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.cdata=function(t){var e;return this.openCurrent(),e=new o(this,t),this.onData(this.writer.cdata(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.comment=function(t){var e;return this.openCurrent(),e=new s(this,t),this.onData(this.writer.comment(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.raw=function(t){var e;return this.openCurrent(),e=new g(this,t),this.onData(this.writer.raw(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.instruction=function(t,e){var r,n,i,o,s;if(this.openCurrent(),null!=t&&(t=b(t)),null!=e&&(e=b(e)),Array.isArray(t))for(r=0,o=t.length;r<o;r++)n=t[r],this.instruction(n);else if(_(t))for(n in t)S.call(t,n)&&(i=t[n],this.instruction(n,i));else M(e)&&(e=e.apply()),s=new y(this,t,e),this.onData(this.writer.processingInstruction(s,this.writerOptions,this.currentLevel+1),this.currentLevel+1);return this},t.prototype.declaration=function(t,e,r){var n;if(this.openCurrent(),this.documentStarted)throw new Error("declaration() must be the first node.");return n=new l(this,t,e,r),this.onData(this.writer.declaration(n,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.doctype=function(t,e,r){if(this.openCurrent(),null==t)throw new Error("Missing root node name.");if(this.root)throw new Error("dtd() must come before the root node.");return this.currentNode=new f(this,e,r),this.currentNode.rootNodeName=t,this.currentNode.children=!1,this.currentLevel++,this.openTags[this.currentLevel]=this.currentNode,this},t.prototype.dtdElement=function(t,e){var r;return this.openCurrent(),r=new h(this,t,e),this.onData(this.writer.dtdElement(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.attList=function(t,e,r,n,i){var o;return this.openCurrent(),o=new a(this,t,e,r,n,i),this.onData(this.writer.dtdAttList(o,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.entity=function(t,e){var r;return this.openCurrent(),r=new u(this,!1,t,e),this.onData(this.writer.dtdEntity(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.pEntity=function(t,e){var r;return this.openCurrent(),r=new u(this,!0,t,e),this.onData(this.writer.dtdEntity(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.notation=function(t,e){var r;return this.openCurrent(),r=new c(this,t,e),this.onData(this.writer.dtdNotation(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.up=function(){if(this.currentLevel<0)throw new Error("The document node has no parent.");return this.currentNode?(this.currentNode.children?this.closeNode(this.currentNode):this.openNode(this.currentNode),this.currentNode=null):this.closeNode(this.openTags[this.currentLevel]),delete this.openTags[this.currentLevel],this.currentLevel--,this},t.prototype.end=function(){for(;this.currentLevel>=0;)this.up();return this.onEnd()},t.prototype.openCurrent=function(){if(this.currentNode)return this.currentNode.children=!0,this.openNode(this.currentNode)},t.prototype.openNode=function(t){var r,i,o,s;if(!t.isOpen){if(this.root||0!==this.currentLevel||t.type!==e.Element||(this.root=t),i="",t.type===e.Element){for(o in this.writerOptions.state=n.OpenTag,i=this.writer.indent(t,this.writerOptions,this.currentLevel)+"<"+t.name,s=t.attribs)S.call(s,o)&&(r=s[o],i+=this.writer.attribute(r,this.writerOptions,this.currentLevel));i+=(t.children?">":"/>")+this.writer.endline(t,this.writerOptions,this.currentLevel),this.writerOptions.state=n.InsideTag}else this.writerOptions.state=n.OpenTag,i=this.writer.indent(t,this.writerOptions,this.currentLevel)+"<!DOCTYPE "+t.rootNodeName,t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),t.children?(i+=" [",this.writerOptions.state=n.InsideTag):(this.writerOptions.state=n.CloseTag,i+=">"),i+=this.writer.endline(t,this.writerOptions,this.currentLevel);return this.onData(i,this.currentLevel),t.isOpen=!0}},t.prototype.closeNode=function(t){var r;if(!t.isClosed)return"",this.writerOptions.state=n.CloseTag,r=t.type===e.Element?this.writer.indent(t,this.writerOptions,this.currentLevel)+"</"+t.name+">"+this.writer.endline(t,this.writerOptions,this.currentLevel):this.writer.indent(t,this.writerOptions,this.currentLevel)+"]>"+this.writer.endline(t,this.writerOptions,this.currentLevel),this.writerOptions.state=n.None,this.onData(r,this.currentLevel),t.isClosed=!0},t.prototype.onData=function(t,e){return this.documentStarted=!0,this.onDataCallback(t,e+1)},t.prototype.onEnd=function(){return this.documentCompleted=!0,this.onEndCallback()},t.prototype.debugInfo=function(t){return null==t?"":"node: <"+t+">"},t.prototype.ele=function(){return this.element.apply(this,arguments)},t.prototype.nod=function(t,e,r){return this.node(t,e,r)},t.prototype.txt=function(t){return this.text(t)},t.prototype.dat=function(t){return this.cdata(t)},t.prototype.com=function(t){return this.comment(t)},t.prototype.ins=function(t,e){return this.instruction(t,e)},t.prototype.dec=function(t,e,r){return this.declaration(t,e,r)},t.prototype.dtd=function(t,e,r){return this.doctype(t,e,r)},t.prototype.e=function(t,e,r){return this.element(t,e,r)},t.prototype.n=function(t,e,r){return this.node(t,e,r)},t.prototype.t=function(t){return this.text(t)},t.prototype.d=function(t){return this.cdata(t)},t.prototype.c=function(t){return this.comment(t)},t.prototype.r=function(t){return this.raw(t)},t.prototype.i=function(t,e){return this.instruction(t,e)},t.prototype.att=function(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},t.prototype.a=function(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},t.prototype.ent=function(t,e){return this.entity(t,e)},t.prototype.pent=function(t,e){return this.pEntity(t,e)},t.prototype.not=function(t,e){return this.notation(t,e)},t}()}).call(this)},3728:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(6055),e=r(5165),t.exports=function(t){function r(t){r.__super__.constructor.call(this,t),this.type=e.Dummy}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return""},r}(n)}).call(this)},7341:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c={}.hasOwnProperty;u=r(2045),h=u.isObject,a=u.isFunction,s=u.getValue,o=r(6055),e=r(5165),n=r(4703),i=r(2097),t.exports=function(t){function r(t,n,i){var o,s,a,h;if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing element name. "+this.debugInfo());if(this.name=this.stringify.name(n),this.type=e.Element,this.attribs={},this.schemaTypeInfo=null,null!=i&&this.attribute(i),t.type===e.Document&&(this.isRoot=!0,this.documentObject=t,t.rootObject=this,t.children))for(s=0,a=(h=t.children).length;s<a;s++)if((o=h[s]).type===e.DocType){o.name=this.name;break}}return function(t,e){for(var r in e)c.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"tagName",{get:function(){return this.name}}),Object.defineProperty(r.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(r.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(r.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(r.prototype,"id",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"className",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"classList",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"attributes",{get:function(){return this.attributeMap&&this.attributeMap.nodes||(this.attributeMap=new i(this.attribs)),this.attributeMap}}),r.prototype.clone=function(){var t,e,r,n;for(e in(r=Object.create(this)).isRoot&&(r.documentObject=null),r.attribs={},n=this.attribs)c.call(n,e)&&(t=n[e],r.attribs[e]=t.clone());return r.children=[],this.children.forEach((function(t){var e;return(e=t.clone()).parent=r,r.children.push(e)})),r},r.prototype.attribute=function(t,e){var r,i;if(null!=t&&(t=s(t)),h(t))for(r in t)c.call(t,r)&&(i=t[r],this.attribute(r,i));else a(e)&&(e=e.apply()),this.options.keepNullAttributes&&null==e?this.attribs[t]=new n(this,t,""):null!=e&&(this.attribs[t]=new n(this,t,e));return this},r.prototype.removeAttribute=function(t){var e,r,n;if(null==t)throw new Error("Missing attribute name. "+this.debugInfo());if(t=s(t),Array.isArray(t))for(r=0,n=t.length;r<n;r++)e=t[r],delete this.attribs[e];else delete this.attribs[t];return this},r.prototype.toString=function(t){return this.options.writer.element(this,this.options.writer.filterOptions(t))},r.prototype.att=function(t,e){return this.attribute(t,e)},r.prototype.a=function(t,e){return this.attribute(t,e)},r.prototype.getAttribute=function(t){return this.attribs.hasOwnProperty(t)?this.attribs[t].value:null},r.prototype.setAttribute=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNode=function(t){return this.attribs.hasOwnProperty(t)?this.attribs[t]:null},r.prototype.setAttributeNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.removeAttributeNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setAttributeNS=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.removeAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNodeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setAttributeNodeNS=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.hasAttribute=function(t){return this.attribs.hasOwnProperty(t)},r.prototype.hasAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setIdAttribute=function(t,e){return this.attribs.hasOwnProperty(t)?this.attribs[t].isId:e},r.prototype.setIdAttributeNS=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setIdAttributeNode=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByClassName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.isEqualNode=function(t){var e,n,i;if(!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t))return!1;if(t.namespaceURI!==this.namespaceURI)return!1;if(t.prefix!==this.prefix)return!1;if(t.localName!==this.localName)return!1;if(t.attribs.length!==this.attribs.length)return!1;for(e=n=0,i=this.attribs.length-1;0<=i?n<=i:n>=i;e=0<=i?++n:--n)if(!this.attribs[e].isEqualNode(t.attribs[e]))return!1;return!0},r}(o)}).call(this)},2097:function(t){(function(){t.exports=function(){function t(t){this.nodes=t}return Object.defineProperty(t.prototype,"length",{get:function(){return Object.keys(this.nodes).length||0}}),t.prototype.clone=function(){return this.nodes=null},t.prototype.getNamedItem=function(t){return this.nodes[t]},t.prototype.setNamedItem=function(t){var e;return e=this.nodes[t.nodeName],this.nodes[t.nodeName]=t,e||null},t.prototype.removeNamedItem=function(t){var e;return e=this.nodes[t],delete this.nodes[t],e||null},t.prototype.item=function(t){return this.nodes[Object.keys(this.nodes)[t]]||null},t.prototype.getNamedItemNS=function(t,e){throw new Error("This DOM method is not implemented.")},t.prototype.setNamedItemNS=function(t){throw new Error("This DOM method is not implemented.")},t.prototype.removeNamedItemNS=function(t,e){throw new Error("This DOM method is not implemented.")},t}()}).call(this)},6055:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w={}.hasOwnProperty;v=r(2045),m=v.isObject,g=v.isFunction,y=v.isEmpty,d=v.getValue,u=null,i=null,o=null,s=null,a=null,f=null,p=null,l=null,h=null,n=null,c=null,e=null,t.exports=function(){function t(t){this.parent=t,this.parent&&(this.options=this.parent.options,this.stringify=this.parent.stringify),this.value=null,this.children=[],this.baseURI=null,u||(u=r(7341),i=r(669),o=r(445),s=r(352),a=r(9762),f=r(2061),p=r(1419),l=r(1757),h=r(3728),n=r(5165),c=r(9059),r(2097),e=r(7143))}return Object.defineProperty(t.prototype,"nodeName",{get:function(){return this.name}}),Object.defineProperty(t.prototype,"nodeType",{get:function(){return this.type}}),Object.defineProperty(t.prototype,"nodeValue",{get:function(){return this.value}}),Object.defineProperty(t.prototype,"parentNode",{get:function(){return this.parent}}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.childNodeList&&this.childNodeList.nodes||(this.childNodeList=new c(this.children)),this.childNodeList}}),Object.defineProperty(t.prototype,"firstChild",{get:function(){return this.children[0]||null}}),Object.defineProperty(t.prototype,"lastChild",{get:function(){return this.children[this.children.length-1]||null}}),Object.defineProperty(t.prototype,"previousSibling",{get:function(){var t;return t=this.parent.children.indexOf(this),this.parent.children[t-1]||null}}),Object.defineProperty(t.prototype,"nextSibling",{get:function(){var t;return t=this.parent.children.indexOf(this),this.parent.children[t+1]||null}}),Object.defineProperty(t.prototype,"ownerDocument",{get:function(){return this.document()||null}}),Object.defineProperty(t.prototype,"textContent",{get:function(){var t,e,r,i,o;if(this.nodeType===n.Element||this.nodeType===n.DocumentFragment){for(o="",e=0,r=(i=this.children).length;e<r;e++)(t=i[e]).textContent&&(o+=t.textContent);return o}return null},set:function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),t.prototype.setParent=function(t){var e,r,n,i,o;for(this.parent=t,t&&(this.options=t.options,this.stringify=t.stringify),o=[],r=0,n=(i=this.children).length;r<n;r++)e=i[r],o.push(e.setParent(this));return o},t.prototype.element=function(t,e,r){var n,i,o,s,a,h,u,c,l,f,p;if(h=null,null===e&&null==r&&(e=(l=[{},null])[0],r=l[1]),null==e&&(e={}),e=d(e),m(e)||(r=(f=[e,r])[0],e=f[1]),null!=t&&(t=d(t)),Array.isArray(t))for(o=0,u=t.length;o<u;o++)i=t[o],h=this.element(i);else if(g(t))h=this.element(t.apply());else if(m(t)){for(a in t)if(w.call(t,a))if(p=t[a],g(p)&&(p=p.apply()),!this.options.ignoreDecorators&&this.stringify.convertAttKey&&0===a.indexOf(this.stringify.convertAttKey))h=this.attribute(a.substr(this.stringify.convertAttKey.length),p);else if(!this.options.separateArrayItems&&Array.isArray(p)&&y(p))h=this.dummy();else if(m(p)&&y(p))h=this.element(a);else if(this.options.keepNullNodes||null!=p)if(!this.options.separateArrayItems&&Array.isArray(p))for(s=0,c=p.length;s<c;s++)i=p[s],(n={})[a]=i,h=this.element(n);else m(p)?!this.options.ignoreDecorators&&this.stringify.convertTextKey&&0===a.indexOf(this.stringify.convertTextKey)?h=this.element(p):(h=this.element(a)).element(p):h=this.element(a,p);else h=this.dummy()}else h=this.options.keepNullNodes||null!==r?!this.options.ignoreDecorators&&this.stringify.convertTextKey&&0===t.indexOf(this.stringify.convertTextKey)?this.text(r):!this.options.ignoreDecorators&&this.stringify.convertCDataKey&&0===t.indexOf(this.stringify.convertCDataKey)?this.cdata(r):!this.options.ignoreDecorators&&this.stringify.convertCommentKey&&0===t.indexOf(this.stringify.convertCommentKey)?this.comment(r):!this.options.ignoreDecorators&&this.stringify.convertRawKey&&0===t.indexOf(this.stringify.convertRawKey)?this.raw(r):!this.options.ignoreDecorators&&this.stringify.convertPIKey&&0===t.indexOf(this.stringify.convertPIKey)?this.instruction(t.substr(this.stringify.convertPIKey.length),r):this.node(t,e,r):this.dummy();if(null==h)throw new Error("Could not create any elements with: "+t+". "+this.debugInfo());return h},t.prototype.insertBefore=function(t,e,r){var n,i,o,s,a;if(null!=t?t.type:void 0)return s=e,(o=t).setParent(this),s?(i=children.indexOf(s),a=children.splice(i),children.push(o),Array.prototype.push.apply(children,a)):children.push(o),o;if(this.isRoot)throw new Error("Cannot insert elements at root level. "+this.debugInfo(t));return i=this.parent.children.indexOf(this),a=this.parent.children.splice(i),n=this.parent.element(t,e,r),Array.prototype.push.apply(this.parent.children,a),n},t.prototype.insertAfter=function(t,e,r){var n,i,o;if(this.isRoot)throw new Error("Cannot insert elements at root level. "+this.debugInfo(t));return i=this.parent.children.indexOf(this),o=this.parent.children.splice(i+1),n=this.parent.element(t,e,r),Array.prototype.push.apply(this.parent.children,o),n},t.prototype.remove=function(){var t;if(this.isRoot)throw new Error("Cannot remove the root element. "+this.debugInfo());return t=this.parent.children.indexOf(this),[].splice.apply(this.parent.children,[t,t-t+1].concat([])),this.parent},t.prototype.node=function(t,e,r){var n,i;return null!=t&&(t=d(t)),e||(e={}),e=d(e),m(e)||(r=(i=[e,r])[0],e=i[1]),n=new u(this,t,e),null!=r&&n.text(r),this.children.push(n),n},t.prototype.text=function(t){var e;return m(t)&&this.element(t),e=new p(this,t),this.children.push(e),this},t.prototype.cdata=function(t){var e;return e=new i(this,t),this.children.push(e),this},t.prototype.comment=function(t){var e;return e=new o(this,t),this.children.push(e),this},t.prototype.commentBefore=function(t){var e,r;return e=this.parent.children.indexOf(this),r=this.parent.children.splice(e),this.parent.comment(t),Array.prototype.push.apply(this.parent.children,r),this},t.prototype.commentAfter=function(t){var e,r;return e=this.parent.children.indexOf(this),r=this.parent.children.splice(e+1),this.parent.comment(t),Array.prototype.push.apply(this.parent.children,r),this},t.prototype.raw=function(t){var e;return e=new f(this,t),this.children.push(e),this},t.prototype.dummy=function(){return new h(this)},t.prototype.instruction=function(t,e){var r,n,i,o,s;if(null!=t&&(t=d(t)),null!=e&&(e=d(e)),Array.isArray(t))for(o=0,s=t.length;o<s;o++)r=t[o],this.instruction(r);else if(m(t))for(r in t)w.call(t,r)&&(n=t[r],this.instruction(r,n));else g(e)&&(e=e.apply()),i=new l(this,t,e),this.children.push(i);return this},t.prototype.instructionBefore=function(t,e){var r,n;return r=this.parent.children.indexOf(this),n=this.parent.children.splice(r),this.parent.instruction(t,e),Array.prototype.push.apply(this.parent.children,n),this},t.prototype.instructionAfter=function(t,e){var r,n;return r=this.parent.children.indexOf(this),n=this.parent.children.splice(r+1),this.parent.instruction(t,e),Array.prototype.push.apply(this.parent.children,n),this},t.prototype.declaration=function(t,e,r){var i,o;return i=this.document(),o=new s(i,t,e,r),0===i.children.length?i.children.unshift(o):i.children[0].type===n.Declaration?i.children[0]=o:i.children.unshift(o),i.root()||i},t.prototype.dtd=function(t,e){var r,i,o,s,h,u,c,l,f;for(r=this.document(),i=new a(r,t,e),o=s=0,u=(l=r.children).length;s<u;o=++s)if(l[o].type===n.DocType)return r.children[o]=i,i;for(o=h=0,c=(f=r.children).length;h<c;o=++h)if(f[o].isRoot)return r.children.splice(o,0,i),i;return r.children.push(i),i},t.prototype.up=function(){if(this.isRoot)throw new Error("The root node has no parent. Use doc() if you need to get the document object.");return this.parent},t.prototype.root=function(){var t;for(t=this;t;){if(t.type===n.Document)return t.rootObject;if(t.isRoot)return t;t=t.parent}},t.prototype.document=function(){var t;for(t=this;t;){if(t.type===n.Document)return t;t=t.parent}},t.prototype.end=function(t){return this.document().end(t)},t.prototype.prev=function(){var t;if((t=this.parent.children.indexOf(this))<1)throw new Error("Already at the first node. "+this.debugInfo());return this.parent.children[t-1]},t.prototype.next=function(){var t;if(-1===(t=this.parent.children.indexOf(this))||t===this.parent.children.length-1)throw new Error("Already at the last node. "+this.debugInfo());return this.parent.children[t+1]},t.prototype.importDocument=function(t){var e;return(e=t.root().clone()).parent=this,e.isRoot=!1,this.children.push(e),this},t.prototype.debugInfo=function(t){var e,r;return null!=(t=t||this.name)||(null!=(e=this.parent)?e.name:void 0)?null==t?"parent: <"+this.parent.name+">":(null!=(r=this.parent)?r.name:void 0)?"node: <"+t+">, parent: <"+this.parent.name+">":"node: <"+t+">":""},t.prototype.ele=function(t,e,r){return this.element(t,e,r)},t.prototype.nod=function(t,e,r){return this.node(t,e,r)},t.prototype.txt=function(t){return this.text(t)},t.prototype.dat=function(t){return this.cdata(t)},t.prototype.com=function(t){return this.comment(t)},t.prototype.ins=function(t,e){return this.instruction(t,e)},t.prototype.doc=function(){return this.document()},t.prototype.dec=function(t,e,r){return this.declaration(t,e,r)},t.prototype.e=function(t,e,r){return this.element(t,e,r)},t.prototype.n=function(t,e,r){return this.node(t,e,r)},t.prototype.t=function(t){return this.text(t)},t.prototype.d=function(t){return this.cdata(t)},t.prototype.c=function(t){return this.comment(t)},t.prototype.r=function(t){return this.raw(t)},t.prototype.i=function(t,e){return this.instruction(t,e)},t.prototype.u=function(){return this.up()},t.prototype.importXMLBuilder=function(t){return this.importDocument(t)},t.prototype.replaceChild=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.removeChild=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.appendChild=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.hasChildNodes=function(){return 0!==this.children.length},t.prototype.cloneNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.normalize=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isSupported=function(t,e){return!0},t.prototype.hasAttributes=function(){return 0!==this.attribs.length},t.prototype.compareDocumentPosition=function(t){var r,n;return(r=this)===t?0:this.document()!==t.document()?(n=e.Disconnected|e.ImplementationSpecific,Math.random()<.5?n|=e.Preceding:n|=e.Following,n):r.isAncestor(t)?e.Contains|e.Preceding:r.isDescendant(t)?e.Contains|e.Following:r.isPreceding(t)?e.Preceding:e.Following},t.prototype.isSameNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.lookupPrefix=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isDefaultNamespace=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.lookupNamespaceURI=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isEqualNode=function(t){var e,r,n;if(t.nodeType!==this.nodeType)return!1;if(t.children.length!==this.children.length)return!1;for(e=r=0,n=this.children.length-1;0<=n?r<=n:r>=n;e=0<=n?++r:--r)if(!this.children[e].isEqualNode(t.children[e]))return!1;return!0},t.prototype.getFeature=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.setUserData=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.getUserData=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.contains=function(t){return!!t&&(t===this||this.isDescendant(t))},t.prototype.isDescendant=function(t){var e,r,n,i;for(r=0,n=(i=this.children).length;r<n;r++){if(t===(e=i[r]))return!0;if(e.isDescendant(t))return!0}return!1},t.prototype.isAncestor=function(t){return t.isDescendant(this)},t.prototype.isPreceding=function(t){var e,r;return e=this.treePosition(t),r=this.treePosition(this),-1!==e&&-1!==r&&e<r},t.prototype.isFollowing=function(t){var e,r;return e=this.treePosition(t),r=this.treePosition(this),-1!==e&&-1!==r&&e>r},t.prototype.treePosition=function(t){var e,r;return r=0,e=!1,this.foreachTreeNode(this.document(),(function(n){if(r++,!e&&n===t)return e=!0})),e?r:-1},t.prototype.foreachTreeNode=function(t,e){var r,n,i,o,s;for(t||(t=this.document()),n=0,i=(o=t.children).length;n<i;n++){if(s=e(r=o[n]))return s;if(s=this.foreachTreeNode(r,e))return s}},t}()}).call(this)},9059:function(t){(function(){t.exports=function(){function t(t){this.nodes=t}return Object.defineProperty(t.prototype,"length",{get:function(){return this.nodes.length||0}}),t.prototype.clone=function(){return this.nodes=null},t.prototype.item=function(t){return this.nodes[t]||null},t}()}).call(this)},1757:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(4791),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing instruction target. "+this.debugInfo());this.type=e.ProcessingInstruction,this.target=this.stringify.insTarget(n),this.name=this.target,i&&(this.value=this.stringify.insValue(i))}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.processingInstruction(this,this.options.writer.filterOptions(t))},r.prototype.isEqualNode=function(t){return!!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.target===this.target},r}(n)}).call(this)},2061:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(6055),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing raw text. "+this.debugInfo());this.type=e.Raw,this.value=this.stringify.raw(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.raw(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},4915:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;e=r(5165),i=r(1061),n=r(8203),t.exports=function(t){function r(t,e){this.stream=t,r.__super__.constructor.call(this,e)}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.endline=function(t,e,i){return t.isLastRootNode&&e.state===n.CloseTag?"":r.__super__.endline.call(this,t,e,i)},r.prototype.document=function(t,e){var r,n,i,o,s,a,h,u,c;for(n=i=0,s=(h=t.children).length;i<s;n=++i)(r=h[n]).isLastRootNode=n===t.children.length-1;for(e=this.filterOptions(e),c=[],o=0,a=(u=t.children).length;o<a;o++)r=u[o],c.push(this.writeChildNode(r,e,0));return c},r.prototype.attribute=function(t,e,n){return this.stream.write(r.__super__.attribute.call(this,t,e,n))},r.prototype.cdata=function(t,e,n){return this.stream.write(r.__super__.cdata.call(this,t,e,n))},r.prototype.comment=function(t,e,n){return this.stream.write(r.__super__.comment.call(this,t,e,n))},r.prototype.declaration=function(t,e,n){return this.stream.write(r.__super__.declaration.call(this,t,e,n))},r.prototype.docType=function(t,e,r){var i,o,s,a;if(r||(r=0),this.openNode(t,e,r),e.state=n.OpenTag,this.stream.write(this.indent(t,e,r)),this.stream.write("<!DOCTYPE "+t.root().name),t.pubID&&t.sysID?this.stream.write(' PUBLIC "'+t.pubID+'" "'+t.sysID+'"'):t.sysID&&this.stream.write(' SYSTEM "'+t.sysID+'"'),t.children.length>0){for(this.stream.write(" ["),this.stream.write(this.endline(t,e,r)),e.state=n.InsideTag,o=0,s=(a=t.children).length;o<s;o++)i=a[o],this.writeChildNode(i,e,r+1);e.state=n.CloseTag,this.stream.write("]")}return e.state=n.CloseTag,this.stream.write(e.spaceBeforeSlash+">"),this.stream.write(this.endline(t,e,r)),e.state=n.None,this.closeNode(t,e,r)},r.prototype.element=function(t,r,i){var s,a,h,u,c,l,f,p,d;for(f in i||(i=0),this.openNode(t,r,i),r.state=n.OpenTag,this.stream.write(this.indent(t,r,i)+"<"+t.name),p=t.attribs)o.call(p,f)&&(s=p[f],this.attribute(s,r,i));if(u=0===(h=t.children.length)?null:t.children[0],0===h||t.children.every((function(t){return(t.type===e.Text||t.type===e.Raw)&&""===t.value})))r.allowEmpty?(this.stream.write(">"),r.state=n.CloseTag,this.stream.write("</"+t.name+">")):(r.state=n.CloseTag,this.stream.write(r.spaceBeforeSlash+"/>"));else if(!r.pretty||1!==h||u.type!==e.Text&&u.type!==e.Raw||null==u.value){for(this.stream.write(">"+this.endline(t,r,i)),r.state=n.InsideTag,c=0,l=(d=t.children).length;c<l;c++)a=d[c],this.writeChildNode(a,r,i+1);r.state=n.CloseTag,this.stream.write(this.indent(t,r,i)+"</"+t.name+">")}else this.stream.write(">"),r.state=n.InsideTag,r.suppressPrettyCount++,this.writeChildNode(u,r,i+1),r.suppressPrettyCount--,r.state=n.CloseTag,this.stream.write("</"+t.name+">");return this.stream.write(this.endline(t,r,i)),r.state=n.None,this.closeNode(t,r,i)},r.prototype.processingInstruction=function(t,e,n){return this.stream.write(r.__super__.processingInstruction.call(this,t,e,n))},r.prototype.raw=function(t,e,n){return this.stream.write(r.__super__.raw.call(this,t,e,n))},r.prototype.text=function(t,e,n){return this.stream.write(r.__super__.text.call(this,t,e,n))},r.prototype.dtdAttList=function(t,e,n){return this.stream.write(r.__super__.dtdAttList.call(this,t,e,n))},r.prototype.dtdElement=function(t,e,n){return this.stream.write(r.__super__.dtdElement.call(this,t,e,n))},r.prototype.dtdEntity=function(t,e,n){return this.stream.write(r.__super__.dtdEntity.call(this,t,e,n))},r.prototype.dtdNotation=function(t,e,n){return this.stream.write(r.__super__.dtdNotation.call(this,t,e,n))},r}(i)}).call(this)},8766:function(t,e,r){(function(){var e,n={}.hasOwnProperty;e=r(1061),t.exports=function(t){function e(t){e.__super__.constructor.call(this,t)}return function(t,e){for(var r in e)n.call(e,r)&&(t[r]=e[r]);function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype}(e,t),e.prototype.document=function(t,e){var r,n,i,o,s;for(e=this.filterOptions(e),o="",n=0,i=(s=t.children).length;n<i;n++)r=s[n],o+=this.writeChildNode(r,e,0);return e.pretty&&o.slice(-e.newline.length)===e.newline&&(o=o.slice(0,-e.newline.length)),o},e}(e)}).call(this)},9910:function(t){(function(){var e=function(t,e){return function(){return t.apply(e,arguments)}},r={}.hasOwnProperty;t.exports=function(){function t(t){var n,i,o;for(n in this.assertLegalName=e(this.assertLegalName,this),this.assertLegalChar=e(this.assertLegalChar,this),t||(t={}),this.options=t,this.options.version||(this.options.version="1.0"),i=t.stringify||{})r.call(i,n)&&(o=i[n],this[n]=o)}return t.prototype.name=function(t){return this.options.noValidation?t:this.assertLegalName(""+t||"")},t.prototype.text=function(t){return this.options.noValidation?t:this.assertLegalChar(this.textEscape(""+t||""))},t.prototype.cdata=function(t){return this.options.noValidation?t:(t=(t=""+t||"").replace("]]>","]]]]><![CDATA[>"),this.assertLegalChar(t))},t.prototype.comment=function(t){if(this.options.noValidation)return t;if((t=""+t||"").match(/--/))throw new Error("Comment text cannot contain double-hypen: "+t);return this.assertLegalChar(t)},t.prototype.raw=function(t){return this.options.noValidation?t:""+t||""},t.prototype.attValue=function(t){return this.options.noValidation?t:this.assertLegalChar(this.attEscape(t=""+t||""))},t.prototype.insTarget=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.insValue=function(t){if(this.options.noValidation)return t;if((t=""+t||"").match(/\?>/))throw new Error("Invalid processing instruction value: "+t);return this.assertLegalChar(t)},t.prototype.xmlVersion=function(t){if(this.options.noValidation)return t;if(!(t=""+t||"").match(/1\.[0-9]+/))throw new Error("Invalid version number: "+t);return t},t.prototype.xmlEncoding=function(t){if(this.options.noValidation)return t;if(!(t=""+t||"").match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/))throw new Error("Invalid encoding: "+t);return this.assertLegalChar(t)},t.prototype.xmlStandalone=function(t){return this.options.noValidation?t:t?"yes":"no"},t.prototype.dtdPubID=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdSysID=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdElementValue=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdAttType=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdAttDefault=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdEntityValue=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdNData=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.convertAttKey="@",t.prototype.convertPIKey="?",t.prototype.convertTextKey="#text",t.prototype.convertCDataKey="#cdata",t.prototype.convertCommentKey="#comment",t.prototype.convertRawKey="#raw",t.prototype.assertLegalChar=function(t){var e,r;if(this.options.noValidation)return t;if(e="","1.0"===this.options.version){if(e=/[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,r=t.match(e))throw new Error("Invalid character in string: "+t+" at index "+r.index)}else if("1.1"===this.options.version&&(e=/[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,r=t.match(e)))throw new Error("Invalid character in string: "+t+" at index "+r.index);return t},t.prototype.assertLegalName=function(t){var e;if(this.options.noValidation)return t;if(this.assertLegalChar(t),e=/^([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])([\x2D\.0-:A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])*$/,!t.match(e))throw new Error("Invalid character in name");return t},t.prototype.textEscape=function(t){var e;return this.options.noValidation?t:(e=this.options.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,t.replace(e,"&").replace(/</g,"<").replace(/>/g,">").replace(/\r/g,"
"))},t.prototype.attEscape=function(t){var e;return this.options.noValidation?t:(e=this.options.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,t.replace(e,"&").replace(/</g,"<").replace(/"/g,""").replace(/\t/g,"	").replace(/\n/g,"
").replace(/\r/g,"
"))},t}()}).call(this)},1419:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(5165),n=r(4791),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing element text. "+this.debugInfo());this.name="#text",this.type=e.Text,this.value=this.stringify.text(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"isElementContentWhitespace",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"wholeText",{get:function(){var t,e,r;for(r="",e=this.previousSibling;e;)r=e.data+r,e=e.previousSibling;for(r+=this.data,t=this.nextSibling;t;)r+=t.data,t=t.nextSibling;return r}}),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.text(this,this.options.writer.filterOptions(t))},r.prototype.splitText=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.replaceWholeText=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r}(n)}).call(this)},1061:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(2045).assign,e=r(5165),r(352),r(9762),r(669),r(445),r(7341),r(2061),r(1419),r(1757),r(3728),r(76),r(9838),r(9134),r(8389),n=r(8203),t.exports=function(){function t(t){var e,r,n;for(e in t||(t={}),this.options=t,r=t.writer||{})o.call(r,e)&&(n=r[e],this["_"+e]=this[e],this[e]=n)}return t.prototype.filterOptions=function(t){var e,r,o,s,a,h,u,c;return t||(t={}),t=i({},this.options,t),(e={writer:this}).pretty=t.pretty||!1,e.allowEmpty=t.allowEmpty||!1,e.indent=null!=(r=t.indent)?r:" ",e.newline=null!=(o=t.newline)?o:"\n",e.offset=null!=(s=t.offset)?s:0,e.dontPrettyTextNodes=null!=(a=null!=(h=t.dontPrettyTextNodes)?h:t.dontprettytextnodes)?a:0,e.spaceBeforeSlash=null!=(u=null!=(c=t.spaceBeforeSlash)?c:t.spacebeforeslash)?u:"",!0===e.spaceBeforeSlash&&(e.spaceBeforeSlash=" "),e.suppressPrettyCount=0,e.user={},e.state=n.None,e},t.prototype.indent=function(t,e,r){var n;return!e.pretty||e.suppressPrettyCount?"":e.pretty&&(n=(r||0)+e.offset+1)>0?new Array(n).join(e.indent):""},t.prototype.endline=function(t,e,r){return!e.pretty||e.suppressPrettyCount?"":e.newline},t.prototype.attribute=function(t,e,r){var n;return this.openAttribute(t,e,r),n=" "+t.name+'="'+t.value+'"',this.closeAttribute(t,e,r),n},t.prototype.cdata=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<![CDATA[",e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+="]]>"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.comment=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"\x3c!-- ",e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=" --\x3e"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.declaration=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<?xml",e.state=n.InsideTag,i+=' version="'+t.version+'"',null!=t.encoding&&(i+=' encoding="'+t.encoding+'"'),null!=t.standalone&&(i+=' standalone="'+t.standalone+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+"?>",i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.docType=function(t,e,r){var i,o,s,a,h;if(r||(r=0),this.openNode(t,e,r),e.state=n.OpenTag,a=this.indent(t,e,r),a+="<!DOCTYPE "+t.root().name,t.pubID&&t.sysID?a+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(a+=' SYSTEM "'+t.sysID+'"'),t.children.length>0){for(a+=" [",a+=this.endline(t,e,r),e.state=n.InsideTag,o=0,s=(h=t.children).length;o<s;o++)i=h[o],a+=this.writeChildNode(i,e,r+1);e.state=n.CloseTag,a+="]"}return e.state=n.CloseTag,a+=e.spaceBeforeSlash+">",a+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),a},t.prototype.element=function(t,r,i){var s,a,h,u,c,l,f,p,d,y,g,m,v,w;for(d in i||(i=0),y=!1,g="",this.openNode(t,r,i),r.state=n.OpenTag,g+=this.indent(t,r,i)+"<"+t.name,m=t.attribs)o.call(m,d)&&(s=m[d],g+=this.attribute(s,r,i));if(u=0===(h=t.children.length)?null:t.children[0],0===h||t.children.every((function(t){return(t.type===e.Text||t.type===e.Raw)&&""===t.value})))r.allowEmpty?(g+=">",r.state=n.CloseTag,g+="</"+t.name+">"+this.endline(t,r,i)):(r.state=n.CloseTag,g+=r.spaceBeforeSlash+"/>"+this.endline(t,r,i));else if(!r.pretty||1!==h||u.type!==e.Text&&u.type!==e.Raw||null==u.value){if(r.dontPrettyTextNodes)for(c=0,f=(v=t.children).length;c<f;c++)if(((a=v[c]).type===e.Text||a.type===e.Raw)&&null!=a.value){r.suppressPrettyCount++,y=!0;break}for(g+=">"+this.endline(t,r,i),r.state=n.InsideTag,l=0,p=(w=t.children).length;l<p;l++)a=w[l],g+=this.writeChildNode(a,r,i+1);r.state=n.CloseTag,g+=this.indent(t,r,i)+"</"+t.name+">",y&&r.suppressPrettyCount--,g+=this.endline(t,r,i),r.state=n.None}else g+=">",r.state=n.InsideTag,r.suppressPrettyCount++,y=!0,g+=this.writeChildNode(u,r,i+1),r.suppressPrettyCount--,y=!1,r.state=n.CloseTag,g+="</"+t.name+">"+this.endline(t,r,i);return this.closeNode(t,r,i),g},t.prototype.writeChildNode=function(t,r,n){switch(t.type){case e.CData:return this.cdata(t,r,n);case e.Comment:return this.comment(t,r,n);case e.Element:return this.element(t,r,n);case e.Raw:return this.raw(t,r,n);case e.Text:return this.text(t,r,n);case e.ProcessingInstruction:return this.processingInstruction(t,r,n);case e.Dummy:return"";case e.Declaration:return this.declaration(t,r,n);case e.DocType:return this.docType(t,r,n);case e.AttributeDeclaration:return this.dtdAttList(t,r,n);case e.ElementDeclaration:return this.dtdElement(t,r,n);case e.EntityDeclaration:return this.dtdEntity(t,r,n);case e.NotationDeclaration:return this.dtdNotation(t,r,n);default:throw new Error("Unknown XML node type: "+t.constructor.name)}},t.prototype.processingInstruction=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<?",e.state=n.InsideTag,i+=t.target,t.value&&(i+=" "+t.value),e.state=n.CloseTag,i+=e.spaceBeforeSlash+"?>",i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.raw=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r),e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.text=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r),e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdAttList=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ATTLIST",e.state=n.InsideTag,i+=" "+t.elementName+" "+t.attributeName+" "+t.attributeType,"#DEFAULT"!==t.defaultValueType&&(i+=" "+t.defaultValueType),t.defaultValue&&(i+=' "'+t.defaultValue+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdElement=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ELEMENT",e.state=n.InsideTag,i+=" "+t.name+" "+t.value,e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdEntity=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ENTITY",e.state=n.InsideTag,t.pe&&(i+=" %"),i+=" "+t.name,t.value?i+=' "'+t.value+'"':(t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),t.nData&&(i+=" NDATA "+t.nData)),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdNotation=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!NOTATION",e.state=n.InsideTag,i+=" "+t.name,t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.pubID?i+=' PUBLIC "'+t.pubID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.openNode=function(t,e,r){},t.prototype.closeNode=function(t,e,r){},t.prototype.openAttribute=function(t,e,r){},t.prototype.closeAttribute=function(t,e,r){},t}()}).call(this)},122:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l;l=r(2045),u=l.assign,c=l.isFunction,i=r(344),o=r(1626),s=r(7535),h=r(8766),a=r(4915),e=r(5165),n=r(8203),t.exports.create=function(t,e,r,n){var i,s;if(null==t)throw new Error("Root element needs a name.");return n=u({},e,r,n),s=(i=new o(n)).element(t),n.headless||(i.declaration(n),null==n.pubID&&null==n.sysID||i.dtd(n)),s},t.exports.begin=function(t,e,r){var n;return c(t)&&(e=(n=[t,e])[0],r=n[1],t={}),e?new s(t,e,r):new o(t)},t.exports.stringWriter=function(t){return new h(t)},t.exports.streamWriter=function(t,e){return new a(t,e)},t.exports.implementation=new i,t.exports.nodeType=e,t.exports.writerState=n}).call(this)},6821:(t,e,r)=>{"use strict";r.r(e),r.d(e,{Converter:()=>hr});var n=r(7913),i=r.n(n),o=r(5300),s=r(9831),a=484813681109536e-20,h=Math.PI/2,u=1e-10,c=.017453292519943295,l=57.29577951308232,f=Math.PI/4,p=2*Math.PI,d=3.14159265359,y={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};const g={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var m=/[\s_\-\/\(\)]/g;function v(t,e){if(t[e])return t[e];for(var r,n=Object.keys(t),i=e.toLowerCase().replace(m,""),o=-1;++o<n.length;)if((r=n[o]).toLowerCase().replace(m,"")===i)return t[r]}function w(t){var e,r,n,i={},o=t.split("+").map((function(t){return t.trim()})).filter((function(t){return t})).reduce((function(t,e){var r=e.split("=");return r.push(!0),t[r[0].toLowerCase()]=r[1],t}),{}),s={proj:"projName",datum:"datumCode",rf:function(t){i.rf=parseFloat(t)},lat_0:function(t){i.lat0=t*c},lat_1:function(t){i.lat1=t*c},lat_2:function(t){i.lat2=t*c},lat_ts:function(t){i.lat_ts=t*c},lon_0:function(t){i.long0=t*c},lon_1:function(t){i.long1=t*c},lon_2:function(t){i.long2=t*c},alpha:function(t){i.alpha=parseFloat(t)*c},lonc:function(t){i.longc=t*c},x_0:function(t){i.x0=parseFloat(t)},y_0:function(t){i.y0=parseFloat(t)},k_0:function(t){i.k0=parseFloat(t)},k:function(t){i.k0=parseFloat(t)},a:function(t){i.a=parseFloat(t)},b:function(t){i.b=parseFloat(t)},r_a:function(){i.R_A=!0},zone:function(t){i.zone=parseInt(t,10)},south:function(){i.utmSouth=!0},towgs84:function(t){i.datum_params=t.split(",").map((function(t){return parseFloat(t)}))},to_meter:function(t){i.to_meter=parseFloat(t)},units:function(t){i.units=t;var e=v(g,t);e&&(i.to_meter=e.to_meter)},from_greenwich:function(t){i.from_greenwich=t*c},pm:function(t){var e=v(y,t);i.from_greenwich=(e||parseFloat(t))*c},nadgrids:function(t){"@null"===t?i.datumCode="none":i.nadgrids=t},axis:function(t){var e="ewnsud";3===t.length&&-1!==e.indexOf(t.substr(0,1))&&-1!==e.indexOf(t.substr(1,1))&&-1!==e.indexOf(t.substr(2,1))&&(i.axis=t)}};for(e in o)r=o[e],e in s?"function"==typeof(n=s[e])?n(r):i[n]=r:i[e]=r;return"string"==typeof i.datumCode&&"WGS84"!==i.datumCode&&(i.datumCode=i.datumCode.toLowerCase()),i}var b=/\s/,M=/[A-Za-z]/,_=/[A-Za-z84]/,x=/[,\]]/,E=/[\d\.E\-\+]/;function S(t){if("string"!=typeof t)throw new Error("not a string");this.text=t.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=1}function O(t,e,r){Array.isArray(e)&&(r.unshift(e),e=null);var n=e?{}:t,i=r.reduce((function(t,e){return T(e,t),t}),n);e&&(t[e]=i)}function T(t,e){if(Array.isArray(t)){var r=t.shift();if("PARAMETER"===r&&(r=t.shift()),1===t.length)return Array.isArray(t[0])?(e[r]={},void T(t[0],e[r])):void(e[r]=t[0]);if(t.length)if("TOWGS84"!==r){if("AXIS"===r)return r in e||(e[r]=[]),void e[r].push(t);var n;switch(Array.isArray(r)||(e[r]={}),r){case"UNIT":case"PRIMEM":case"VERT_DATUM":return e[r]={name:t[0].toLowerCase(),convert:t[1]},void(3===t.length&&T(t[2],e[r]));case"SPHEROID":case"ELLIPSOID":return e[r]={name:t[0],a:t[1],rf:t[2]},void(4===t.length&&T(t[3],e[r]));case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"EDATUM":case"ENGINEERINGDATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":case"COMPD_CS":case"COMPOUNDCRS":case"ENGINEERINGCRS":case"ENGCRS":case"FITTED_CS":case"LOCAL_DATUM":case"DATUM":return t[0]=["name",t[0]],void O(e,r,t);default:for(n=-1;++n<t.length;)if(!Array.isArray(t[n]))return T(t,e[r]);return O(e,r,t)}}else e[r]=t;else e[r]=!0}else e[t]=!0}function I(t){return.017453292519943295*t}function N(t){var e=new S(t).output(),r=e.shift(),n=e.shift();e.unshift(["name",n]),e.unshift(["type",r]);var i={};return T(e,i),function(t){if("GEOGCS"===t.type?t.projName="longlat":"LOCAL_CS"===t.type?(t.projName="identity",t.local=!0):"object"==typeof t.PROJECTION?t.projName=Object.keys(t.PROJECTION)[0]:t.projName=t.PROJECTION,t.AXIS){for(var e="",r=0,n=t.AXIS.length;r<n;++r){var i=t.AXIS[r][0].toLowerCase();-1!==i.indexOf("north")?e+="n":-1!==i.indexOf("south")?e+="s":-1!==i.indexOf("east")?e+="e":-1!==i.indexOf("west")&&(e+="w")}2===e.length&&(e+="u"),3===e.length&&(t.axis=e)}t.UNIT&&(t.units=t.UNIT.name.toLowerCase(),"metre"===t.units&&(t.units="meter"),t.UNIT.convert&&("GEOGCS"===t.type?t.DATUM&&t.DATUM.SPHEROID&&(t.to_meter=t.UNIT.convert*t.DATUM.SPHEROID.a):t.to_meter=t.UNIT.convert));var o=t.GEOGCS;function s(e){return e*(t.to_meter||1)}"GEOGCS"===t.type&&(o=t),o&&(o.DATUM?t.datumCode=o.DATUM.name.toLowerCase():t.datumCode=o.name.toLowerCase(),"d_"===t.datumCode.slice(0,2)&&(t.datumCode=t.datumCode.slice(2)),"new_zealand_geodetic_datum_1949"!==t.datumCode&&"new_zealand_1949"!==t.datumCode||(t.datumCode="nzgd49"),"wgs_1984"!==t.datumCode&&"world_geodetic_system_1984"!==t.datumCode||("Mercator_Auxiliary_Sphere"===t.PROJECTION&&(t.sphere=!0),t.datumCode="wgs84"),"_ferro"===t.datumCode.slice(-6)&&(t.datumCode=t.datumCode.slice(0,-6)),"_jakarta"===t.datumCode.slice(-8)&&(t.datumCode=t.datumCode.slice(0,-8)),~t.datumCode.indexOf("belge")&&(t.datumCode="rnb72"),o.DATUM&&o.DATUM.SPHEROID&&(t.ellps=o.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),"international"===t.ellps.toLowerCase().slice(0,13)&&(t.ellps="intl"),t.a=o.DATUM.SPHEROID.a,t.rf=parseFloat(o.DATUM.SPHEROID.rf,10)),o.DATUM&&o.DATUM.TOWGS84&&(t.datum_params=o.DATUM.TOWGS84),~t.datumCode.indexOf("osgb_1936")&&(t.datumCode="osgb36"),~t.datumCode.indexOf("osni_1952")&&(t.datumCode="osni52"),(~t.datumCode.indexOf("tm65")||~t.datumCode.indexOf("geodetic_datum_of_1965"))&&(t.datumCode="ire65"),"ch1903+"===t.datumCode&&(t.datumCode="ch1903"),~t.datumCode.indexOf("israel")&&(t.datumCode="isr93")),t.b&&!isFinite(t.b)&&(t.b=t.a),[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_2","Standard_Parallel_2"],["false_easting","False_Easting"],["false_northing","False_Northing"],["central_meridian","Central_Meridian"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",I],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",I],["x0","false_easting",s],["y0","false_northing",s],["long0","central_meridian",I],["lat0","latitude_of_origin",I],["lat0","standard_parallel_1",I],["lat1","standard_parallel_1",I],["lat2","standard_parallel_2",I],["azimuth","Azimuth"],["alpha","azimuth",I],["srsCode","name"]].forEach((function(e){return function(t,e){var r=e[0],n=e[1];!(r in t)&&n in t&&(t[r]=t[n],3===e.length&&(t[r]=e[2](t[r])))}(t,e)})),t.long0||!t.longc||"Albers_Conic_Equal_Area"!==t.projName&&"Lambert_Azimuthal_Equal_Area"!==t.projName||(t.long0=t.longc),t.lat_ts||!t.lat1||"Stereographic_South_Pole"!==t.projName&&"Polar Stereographic (variant B)"!==t.projName||(t.lat0=I(t.lat1>0?90:-90),t.lat_ts=t.lat1)}(i),i}function P(t){var e=this;if(2===arguments.length){var r=arguments[1];"string"==typeof r?"+"===r.charAt(0)?P[t]=w(arguments[1]):P[t]=N(arguments[1]):P[t]=r}else if(1===arguments.length){if(Array.isArray(t))return t.map((function(t){Array.isArray(t)?P.apply(e,t):P(t)}));if("string"==typeof t){if(t in P)return P[t]}else"EPSG"in t?P["EPSG:"+t.EPSG]=t:"ESRI"in t?P["ESRI:"+t.ESRI]=t:"IAU2000"in t?P["IAU2000:"+t.IAU2000]=t:console.log(t);return}}S.prototype.readCharicter=function(){var t=this.text[this.place++];if(4!==this.state)for(;b.test(t);){if(this.place>=this.text.length)return;t=this.text[this.place++]}switch(this.state){case 1:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},S.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if(x.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},S.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=1)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=1,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},S.prototype.number=function(t){if(!E.test(t)){if(x.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},S.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},S.prototype.keyword=function(t){if(_.test(t))this.word+=t;else{if("["===t){var e=[];return e.push(this.word),this.level++,null===this.root?this.root=e:this.currentObject.push(e),this.stack.push(this.currentObject),this.currentObject=e,void(this.state=1)}if(!x.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},S.prototype.neutral=function(t){if(M.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(E.test(t))return this.word=t,void(this.state=3);if(!x.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},S.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(-1===this.state)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)},function(t){t("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),t("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),t("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),t.WGS84=t["EPSG:4326"],t["EPSG:3785"]=t["EPSG:3857"],t.GOOGLE=t["EPSG:3857"],t["EPSG:900913"]=t["EPSG:3857"],t["EPSG:102113"]=t["EPSG:3857"]}(P);const A=P;var C=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"],D=["3857","900913","3785","102113"];function k(t,e){var r,n;if(t=t||{},!e)return t;for(n in e)void 0!==(r=e[n])&&(t[n]=r);return t}function L(t,e,r){var n=t*e;return r/Math.sqrt(1-n*n)}function j(t){return t<0?-1:1}function F(t){return Math.abs(t)<=d?t:t-j(t)*p}function R(t,e,r){var n=t*r,i=.5*t;return n=Math.pow((1-n)/(1+n),i),Math.tan(.5*(h-e))/n}function G(t,e){for(var r,n,i=.5*t,o=h-2*Math.atan(e),s=0;s<=15;s++)if(r=t*Math.sin(o),o+=n=h-2*Math.atan(e*Math.pow((1-r)/(1+r),i))-o,Math.abs(n)<=1e-10)return o;return-9999}function B(t){return t}var U=[{init:function(){var t=this.b/this.a;this.es=1-t*t,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},forward:function(t){var e,r,n=t.x,i=t.y;if(i*l>90&&i*l<-90&&n*l>180&&n*l<-180)return null;if(Math.abs(Math.abs(i)-h)<=u)return null;if(this.sphere)e=this.x0+this.a*this.k0*F(n-this.long0),r=this.y0+this.a*this.k0*Math.log(Math.tan(f+.5*i));else{var o=Math.sin(i),s=R(this.e,i,o);e=this.x0+this.a*this.k0*F(n-this.long0),r=this.y0-this.a*this.k0*Math.log(s)}return t.x=e,t.y=r,t},inverse:function(t){var e,r,n=t.x-this.x0,i=t.y-this.y0;if(this.sphere)r=h-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(-9999===(r=G(this.e,o)))return null}return e=F(this.long0+n/(this.a*this.k0)),t.x=e,t.y=r,t},names:["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{init:function(){},forward:B,inverse:B,names:["longlat","identity"]}],q={},z=[];function V(t,e){var r=z.length;return t.names?(z[r]=t,t.names.forEach((function(t){q[t.toLowerCase()]=r})),this):(console.log(e),!0)}const W={start:function(){U.forEach(V)},add:V,get:function(t){if(!t)return!1;var e=t.toLowerCase();return void 0!==q[e]&&z[q[e]]?z[q[e]]:void 0}};var X={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},APL4:{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},clrk58:{a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS7:{a:6378135,rf:298.26,ellipseName:"WGS 72"}},$=X.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};X.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};var Y={wgs84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},ch1903:{towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"},ggrs87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},nad83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},nad27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},osni52:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},rassadiran:{towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},osgb36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"},s_jtsk:{towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"},beduaram:{towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"},gunung_segara:{towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"},rnb72:{towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}};function Q(t,e){if(!(this instanceof Q))return new Q(t);e=e||function(t){if(t)throw t};var r=function(t){if(!function(t){return"string"==typeof t}(t))return t;if(function(t){return t in A}(t))return A[t];if(function(t){return C.some((function(e){return t.indexOf(e)>-1}))}(t)){var e=N(t);if(function(t){var e=v(t,"authority");if(e){var r=v(e,"epsg");return r&&D.indexOf(r)>-1}}(e))return A["EPSG:3857"];var r=function(t){var e=v(t,"extension");if(e)return v(e,"proj4")}(e);return r?w(r):e}return function(t){return"+"===t[0]}(t)?w(t):void 0}(t);if("object"==typeof r){var n=Q.projections.get(r.projName);if(n){if(r.datumCode&&"none"!==r.datumCode){var i=v(Y,r.datumCode);i&&(r.datum_params=i.towgs84?i.towgs84.split(","):null,r.ellps=i.ellipse,r.datumName=i.datumName?i.datumName:r.datumCode)}r.k0=r.k0||1,r.axis=r.axis||"enu",r.ellps=r.ellps||"wgs84";var o,s,h,c,l,f,p=function(t,e,r,n,i){if(!t){var o=v(X,n);o||(o=$),t=o.a,e=o.b,r=o.rf}return r&&!e&&(e=(1-1/r)*t),(0===r||Math.abs(t-e)<u)&&(i=!0,e=t),{a:t,b:e,rf:r,sphere:i}}(r.a,r.b,r.rf,r.ellps,r.sphere),d=(o=p.a,s=p.b,p.rf,l=((h=o*o)-(c=s*s))/h,f=0,r.R_A?(h=(o*=1-l*(.16666666666666666+l*(.04722222222222222+.022156084656084655*l)))*o,l=0):f=Math.sqrt(l),{es:l,e:f,ep2:(h-c)/c}),y=r.datum||function(t,e,r,n,i,o){var s={};return s.datum_type=void 0===t||"none"===t?5:4,e&&(s.datum_params=e.map(parseFloat),0===s.datum_params[0]&&0===s.datum_params[1]&&0===s.datum_params[2]||(s.datum_type=1),s.datum_params.length>3&&(0===s.datum_params[3]&&0===s.datum_params[4]&&0===s.datum_params[5]&&0===s.datum_params[6]||(s.datum_type=2,s.datum_params[3]*=a,s.datum_params[4]*=a,s.datum_params[5]*=a,s.datum_params[6]=s.datum_params[6]/1e6+1))),s.a=r,s.b=n,s.es=i,s.ep2=o,s}(r.datumCode,r.datum_params,p.a,p.b,d.es,d.ep2);k(this,r),k(this,n),this.a=p.a,this.b=p.b,this.rf=p.rf,this.sphere=p.sphere,this.es=d.es,this.e=d.e,this.ep2=d.ep2,this.datum=y,this.init(),e(null,this)}else e(t)}else e(t)}Q.projections=W,Q.projections.start();const K=Q;function H(t,e,r){var n,i,o,s,a=t.x,u=t.y,c=t.z?t.z:0;if(u<-h&&u>-1.001*h)u=-h;else if(u>h&&u<1.001*h)u=h;else{if(u<-h)return{x:-1/0,y:-1/0,z:t.z};if(u>h)return{x:1/0,y:1/0,z:t.z}}return a>Math.PI&&(a-=2*Math.PI),i=Math.sin(u),s=Math.cos(u),o=i*i,{x:((n=r/Math.sqrt(1-e*o))+c)*s*Math.cos(a),y:(n+c)*s*Math.sin(a),z:(n*(1-e)+c)*i}}function J(t,e,r,n){var i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w=t.x,b=t.y,M=t.z?t.z:0;if(i=Math.sqrt(w*w+b*b),o=Math.sqrt(w*w+b*b+M*M),i/r<1e-12){if(m=0,o/r<1e-12)return v=-n,{x:t.x,y:t.y,z:t.z}}else m=Math.atan2(b,w);s=M/o,l=(a=i/o)*(1-e)*(h=1/Math.sqrt(1-e*(2-e)*a*a)),f=s*h,g=0;do{g++,u=e*(c=r/Math.sqrt(1-e*f*f))/(c+(v=i*l+M*f-c*(1-e*f*f))),y=(d=s*(h=1/Math.sqrt(1-u*(2-u)*a*a)))*l-(p=a*(1-u)*h)*f,l=p,f=d}while(y*y>1e-24&&g<30);return{x:m,y:Math.atan(d/Math.abs(p)),z:v}}function Z(t){return 1===t||2===t}function tt(t,e,r){var n,i,o,s=r.x,a=r.y,h=r.z||0,u={};for(o=0;o<3;o++)if(!e||2!==o||void 0!==r.z)switch(0===o?(n=s,i=-1!=="ew".indexOf(t.axis[o])?"x":"y"):1===o?(n=a,i=-1!=="ns".indexOf(t.axis[o])?"y":"x"):(n=h,i="z"),t.axis[o]){case"e":u[i]=n;break;case"w":u[i]=-n;break;case"n":u[i]=n;break;case"s":u[i]=-n;break;case"u":void 0!==r[i]&&(u.z=n);break;case"d":void 0!==r[i]&&(u.z=-n);break;default:return null}return u}function et(t){var e={x:t[0],y:t[1]};return t.length>2&&(e.z=t[2]),t.length>3&&(e.m=t[3]),e}function rt(t){if("function"==typeof Number.isFinite){if(Number.isFinite(t))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof t||t!=t||!isFinite(t))throw new TypeError("coordinates must be finite numbers")}function nt(t,e,r){var n;if(Array.isArray(r)&&(r=et(r)),function(t){rt(t.x),rt(t.y)}(r),t.datum&&e.datum&&function(t,e){return(1===t.datum.datum_type||2===t.datum.datum_type)&&"WGS84"!==e.datumCode||(1===e.datum.datum_type||2===e.datum.datum_type)&&"WGS84"!==t.datumCode}(t,e)&&(r=nt(t,n=new K("WGS84"),r),t=n),"enu"!==t.axis&&(r=tt(t,!1,r)),"longlat"===t.projName)r={x:r.x*c,y:r.y*c,z:r.z||0};else if(t.to_meter&&(r={x:r.x*t.to_meter,y:r.y*t.to_meter,z:r.z||0}),!(r=t.inverse(r)))return;return t.from_greenwich&&(r.x+=t.from_greenwich),r=function(t,e,r){return function(t,e){return t.datum_type===e.datum_type&&!(t.a!==e.a||Math.abs(t.es-e.es)>5e-11)&&(1===t.datum_type?t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]:2!==t.datum_type||t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]&&t.datum_params[3]===e.datum_params[3]&&t.datum_params[4]===e.datum_params[4]&&t.datum_params[5]===e.datum_params[5]&&t.datum_params[6]===e.datum_params[6])}(t,e)||5===t.datum_type||5===e.datum_type?r:t.es!==e.es||t.a!==e.a||Z(t.datum_type)||Z(e.datum_type)?(r=H(r,t.es,t.a),Z(t.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x+r[0],y:t.y+r[1],z:t.z+r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],h=r[5],u=r[6];return{x:u*(t.x-h*t.y+a*t.z)+n,y:u*(h*t.x+t.y-s*t.z)+i,z:u*(-a*t.x+s*t.y+t.z)+o}}}(r,t.datum_type,t.datum_params)),Z(e.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x-r[0],y:t.y-r[1],z:t.z-r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],h=r[5],u=r[6],c=(t.x-n)/u,l=(t.y-i)/u,f=(t.z-o)/u;return{x:c+h*l-a*f,y:-h*c+l+s*f,z:a*c-s*l+f}}}(r,e.datum_type,e.datum_params)),J(r,e.es,e.a,e.b)):r}(t.datum,e.datum,r),e.from_greenwich&&(r={x:r.x-e.from_greenwich,y:r.y,z:r.z||0}),"longlat"===e.projName?r={x:r.x*l,y:r.y*l,z:r.z||0}:(r=e.forward(r),e.to_meter&&(r={x:r.x/e.to_meter,y:r.y/e.to_meter,z:r.z||0})),"enu"!==e.axis?tt(e,!0,r):r}var it=K("WGS84");function ot(t,e,r){var n,i,o;return Array.isArray(r)?(n=nt(t,e,r)||{x:NaN,y:NaN},r.length>2?void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name?"number"==typeof n.z?[n.x,n.y,n.z].concat(r.splice(3)):[n.x,n.y,r[2]].concat(r.splice(3)):[n.x,n.y].concat(r.splice(2)):[n.x,n.y]):(i=nt(t,e,r),2===(o=Object.keys(r)).length||o.forEach((function(n){if(void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name){if("x"===n||"y"===n||"z"===n)return}else if("x"===n||"y"===n)return;i[n]=r[n]})),i)}function st(t){return t instanceof K?t:t.oProj?t.oProj:K(t)}const at=function(t,e,r){t=st(t);var n,i=!1;return void 0===e?(e=t,t=it,i=!0):(void 0!==e.x||Array.isArray(e))&&(r=e,e=t,t=it,i=!0),e=st(e),r?ot(t,e,r):(n={forward:function(r){return ot(t,e,r)},inverse:function(r){return ot(e,t,r)}},i&&(n.oProj=e),n)};var ht="AJSAJS",ut="AFAFAF",ct=65,lt=73,ft=79;const pt={forward:dt,inverse:function(t){var e=vt(bt(t.toUpperCase()));return e.lat&&e.lon?[e.lon,e.lat,e.lon,e.lat]:[e.left,e.bottom,e.right,e.top]},toPoint:yt};function dt(t,e){return e=e||5,function(t,e){var r,n,i,o,s,a,h,u,c,l,f,p="00000"+t.easting,d="00000"+t.northing;return t.zoneNumber+t.zoneLetter+(c=t.easting,l=t.northing,f=wt(t.zoneNumber),r=Math.floor(c/1e5),n=Math.floor(l/1e5)%20,o=ht.charCodeAt(i=f-1),s=ut.charCodeAt(i),u=!1,(a=o+r-1)>90&&(a=a-90+ct-1,u=!0),(a===lt||o<lt&&a>lt||(a>lt||o<lt)&&u)&&a++,(a===ft||o<ft&&a>ft||(a>ft||o<ft)&&u)&&++a===lt&&a++,a>90&&(a=a-90+ct-1),(h=s+n)>86?(h=h-86+ct-1,u=!0):u=!1,(h===lt||s<lt&&h>lt||(h>lt||s<lt)&&u)&&h++,(h===ft||s<ft&&h>ft||(h>ft||s<ft)&&u)&&++h===lt&&h++,h>86&&(h=h-86+ct-1),String.fromCharCode(a)+String.fromCharCode(h))+p.substr(p.length-5,e)+d.substr(d.length-5,e)}(function(t){var e,r,n,i,o,s,a,h=t.lat,u=t.lon,c=6378137,l=.00669438,f=.9996,p=gt(h),d=gt(u);a=Math.floor((u+180)/6)+1,180===u&&(a=60),h>=56&&h<64&&u>=3&&u<12&&(a=32),h>=72&&h<84&&(u>=0&&u<9?a=31:u>=9&&u<21?a=33:u>=21&&u<33?a=35:u>=33&&u<42&&(a=37)),s=gt(6*(a-1)-180+3),e=.006739496752268451,r=c/Math.sqrt(1-l*Math.sin(p)*Math.sin(p)),n=Math.tan(p)*Math.tan(p),i=e*Math.cos(p)*Math.cos(p);var y,g,m=f*r*((o=Math.cos(p)*(d-s))+(1-n+i)*o*o*o/6+(5-18*n+n*n+72*i-58*e)*o*o*o*o*o/120)+5e5,v=f*(c*(.9983242984503243*p-.002514607064228144*Math.sin(2*p)+2639046602129982e-21*Math.sin(4*p)-3.418046101696858e-9*Math.sin(6*p))+r*Math.tan(p)*(o*o/2+(5-n+9*i+4*i*i)*o*o*o*o/24+(61-58*n+n*n+600*i-2.2240339282485886)*o*o*o*o*o*o/720));return h<0&&(v+=1e7),{northing:Math.round(v),easting:Math.round(m),zoneNumber:a,zoneLetter:(y=h,g="Z",84>=y&&y>=72?g="X":72>y&&y>=64?g="W":64>y&&y>=56?g="V":56>y&&y>=48?g="U":48>y&&y>=40?g="T":40>y&&y>=32?g="S":32>y&&y>=24?g="R":24>y&&y>=16?g="Q":16>y&&y>=8?g="P":8>y&&y>=0?g="N":0>y&&y>=-8?g="M":-8>y&&y>=-16?g="L":-16>y&&y>=-24?g="K":-24>y&&y>=-32?g="J":-32>y&&y>=-40?g="H":-40>y&&y>=-48?g="G":-48>y&&y>=-56?g="F":-56>y&&y>=-64?g="E":-64>y&&y>=-72?g="D":-72>y&&y>=-80&&(g="C"),g)}}({lat:t[1],lon:t[0]}),e)}function yt(t){var e=vt(bt(t.toUpperCase()));return e.lat&&e.lon?[e.lon,e.lat]:[(e.left+e.right)/2,(e.top+e.bottom)/2]}function gt(t){return t*(Math.PI/180)}function mt(t){return t/Math.PI*180}function vt(t){var e=t.northing,r=t.easting,n=t.zoneLetter,i=t.zoneNumber;if(i<0||i>60)return null;var o,s,a,h,u,c,l,f,p,d=.9996,y=6378137,g=.00669438,m=(1-Math.sqrt(.99330562))/(1+Math.sqrt(.99330562)),v=r-5e5,w=e;n<"N"&&(w-=1e7),l=6*(i-1)-180+3,o=.006739496752268451,p=(f=w/d/6367449.145945056)+(3*m/2-27*m*m*m/32)*Math.sin(2*f)+(21*m*m/16-55*m*m*m*m/32)*Math.sin(4*f)+151*m*m*m/96*Math.sin(6*f),s=y/Math.sqrt(1-g*Math.sin(p)*Math.sin(p)),a=Math.tan(p)*Math.tan(p),h=o*Math.cos(p)*Math.cos(p),u=.99330562*y/Math.pow(1-g*Math.sin(p)*Math.sin(p),1.5),c=v/(s*d);var b=p-s*Math.tan(p)/u*(c*c/2-(5+3*a+10*h-4*h*h-9*o)*c*c*c*c/24+(61+90*a+298*h+45*a*a-1.6983531815716497-3*h*h)*c*c*c*c*c*c/720);b=mt(b);var M,_=(c-(1+2*a+h)*c*c*c/6+(5-2*h+28*a-3*h*h+8*o+24*a*a)*c*c*c*c*c/120)/Math.cos(p);if(_=l+mt(_),t.accuracy){var x=vt({northing:t.northing+t.accuracy,easting:t.easting+t.accuracy,zoneLetter:t.zoneLetter,zoneNumber:t.zoneNumber});M={top:x.lat,right:x.lon,bottom:b,left:_}}else M={lat:b,lon:_};return M}function wt(t){var e=t%6;return 0===e&&(e=6),e}function bt(t){if(t&&0===t.length)throw"MGRSPoint coverting from nothing";for(var e,r=t.length,n=null,i="",o=0;!/[A-Z]/.test(e=t.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+t;i+=e,o++}var s=parseInt(i,10);if(0===o||o+3>r)throw"MGRSPoint bad conversion from: "+t;var a=t.charAt(o++);if(a<="A"||"B"===a||"Y"===a||a>="Z"||"I"===a||"O"===a)throw"MGRSPoint zone letter "+a+" not handled: "+t;n=t.substring(o,o+=2);for(var h=wt(s),u=function(t,e){for(var r=ht.charCodeAt(e-1),n=1e5,i=!1;r!==t.charCodeAt(0);){if(++r===lt&&r++,r===ft&&r++,r>90){if(i)throw"Bad character: "+t;r=ct,i=!0}n+=1e5}return n}(n.charAt(0),h),c=function(t,e){if(t>"V")throw"MGRSPoint given invalid Northing "+t;for(var r=ut.charCodeAt(e-1),n=0,i=!1;r!==t.charCodeAt(0);){if(++r===lt&&r++,r===ft&&r++,r>86){if(i)throw"Bad character: "+t;r=ct,i=!0}n+=1e5}return n}(n.charAt(1),h);c<Mt(a);)c+=2e6;var l=r-o;if(l%2!=0)throw"MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters"+t;var f,p,d,y=l/2,g=0,m=0;return y>0&&(f=1e5/Math.pow(10,y),p=t.substring(o,o+y),g=parseFloat(p)*f,d=t.substring(o+y),m=parseFloat(d)*f),{easting:g+u,northing:m+c,zoneLetter:a,zoneNumber:s,accuracy:f}}function Mt(t){var e;switch(t){case"C":e=11e5;break;case"D":e=2e6;break;case"E":e=28e5;break;case"F":e=37e5;break;case"G":e=46e5;break;case"H":e=55e5;break;case"J":e=64e5;break;case"K":e=73e5;break;case"L":e=82e5;break;case"M":e=91e5;break;case"N":e=0;break;case"P":e=8e5;break;case"Q":e=17e5;break;case"R":e=26e5;break;case"S":e=35e5;break;case"T":e=44e5;break;case"U":e=53e5;break;case"V":e=62e5;break;case"W":e=7e6;break;case"X":e=79e5;break;default:e=-1}if(e>=0)return e;throw"Invalid zone letter: "+t}function _t(t,e,r){if(!(this instanceof _t))return new _t(t,e,r);if(Array.isArray(t))this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("object"==typeof t)this.x=t.x,this.y=t.y,this.z=t.z||0;else if("string"==typeof t&&void 0===e){var n=t.split(",");this.x=parseFloat(n[0],10),this.y=parseFloat(n[1],10),this.z=parseFloat(n[2],10)||0}else this.x=t,this.y=e,this.z=r||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}_t.fromMGRS=function(t){return new _t(yt(t))},_t.prototype.toMGRS=function(t){return dt([this.x,this.y],t)};const xt=_t;var Et=.046875,St=.01953125,Ot=.01068115234375;function Tt(t){var e=[];e[0]=1-t*(.25+t*(Et+t*(St+t*Ot))),e[1]=t*(.75-t*(Et+t*(St+t*Ot)));var r=t*t;return e[2]=r*(.46875-t*(.013020833333333334+.007120768229166667*t)),r*=t,e[3]=r*(.3645833333333333-.005696614583333333*t),e[4]=r*t*.3076171875,e}function It(t,e,r,n){return r*=e,e*=e,n[0]*t-r*(n[1]+e*(n[2]+e*(n[3]+e*n[4])))}function Nt(t,e,r){for(var n=1/(1-e),i=t,o=20;o;--o){var s=Math.sin(i),a=1-e*s*s;if(i-=a=(It(i,s,Math.cos(i),r)-t)*(a*Math.sqrt(a))*n,Math.abs(a)<u)return i}return i}const Pt={init:function(){this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.es&&(this.en=Tt(this.es),this.ml0=It(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0),a=Math.sin(o),h=Math.cos(o);if(this.es){var c=h*s,l=Math.pow(c,2),f=this.ep2*Math.pow(h,2),p=Math.pow(f,2),d=Math.abs(h)>u?Math.tan(o):0,y=Math.pow(d,2),g=Math.pow(y,2);e=1-this.es*Math.pow(a,2),c/=Math.sqrt(e);var m=It(o,a,h,this.en);r=this.a*(this.k0*c*(1+l/6*(1-y+f+l/20*(5-18*y+g+14*f-58*y*f+l/42*(61+179*g-g*y-479*y)))))+this.x0,n=this.a*(this.k0*(m-this.ml0+a*s*c/2*(1+l/12*(5-y+9*f+4*p+l/30*(61+g-58*y+270*f-330*y*f+l/56*(1385+543*g-g*y-3111*y))))))+this.y0}else{var v=h*Math.sin(s);if(Math.abs(Math.abs(v)-1)<u)return 93;if(r=.5*this.a*this.k0*Math.log((1+v)/(1-v))+this.x0,n=h*Math.cos(s)/Math.sqrt(1-Math.pow(v,2)),(v=Math.abs(n))>=1){if(v-1>u)return 93;n=0}else n=Math.acos(n);o<0&&(n=-n),n=this.a*this.k0*(n-this.lat0)+this.y0}return t.x=r,t.y=n,t},inverse:function(t){var e,r,n,i,o=(t.x-this.x0)*(1/this.a),s=(t.y-this.y0)*(1/this.a);if(this.es)if(r=Nt(e=this.ml0+s/this.k0,this.es,this.en),Math.abs(r)<h){var a=Math.sin(r),c=Math.cos(r),l=Math.abs(c)>u?Math.tan(r):0,f=this.ep2*Math.pow(c,2),p=Math.pow(f,2),d=Math.pow(l,2),y=Math.pow(d,2);e=1-this.es*Math.pow(a,2);var g=o*Math.sqrt(e)/this.k0,m=Math.pow(g,2);n=r-(e*=l)*m/(1-this.es)*.5*(1-m/12*(5+3*d-9*f*d+f-4*p-m/30*(61+90*d-252*f*d+45*y+46*f-m/56*(1385+3633*d+4095*y+1574*y*d)))),i=F(this.long0+g*(1-m/6*(1+2*d+f-m/20*(5+28*d+24*y+8*f*d+6*f-m/42*(61+662*d+1320*y+720*y*d))))/c)}else n=h*j(s),i=0;else{var v=Math.exp(o/this.k0),w=.5*(v-1/v),b=this.lat0+s/this.k0,M=Math.cos(b);e=Math.sqrt((1-Math.pow(M,2))/(1+Math.pow(w,2))),n=Math.asin(e),s<0&&(n=-n),i=0===w&&0===M?0:F(Math.atan2(w,M)+this.long0)}return t.x=i,t.y=n,t},names:["Transverse_Mercator","Transverse Mercator","tmerc"]};function At(t){var e=Math.exp(t);return(e-1/e)/2}function Ct(t,e){t=Math.abs(t),e=Math.abs(e);var r=Math.max(t,e),n=Math.min(t,e)/(r||1);return r*Math.sqrt(1+Math.pow(n,2))}function Dt(t,e){for(var r,n=2*Math.cos(2*e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return e+r*Math.sin(2*e)}function kt(t,e,r){for(var n,i,o=Math.sin(e),s=Math.cos(e),a=At(r),h=function(t){var e=Math.exp(t);return(e+1/e)/2}(r),u=2*s*h,c=-2*o*a,l=t.length-1,f=t[l],p=0,d=0,y=0;--l>=0;)n=d,i=p,f=u*(d=f)-n-c*(p=y)+t[l],y=c*d-i+u*p;return[(u=o*h)*f-(c=s*a)*y,u*y+c*f]}const Lt={init:function(){if(void 0===this.es||this.es<=0)throw new Error("incorrect elliptical usage");this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),e=t/(2-t),r=e;this.cgb[0]=e*(2+e*(-2/3+e*(e*(116/45+e*(26/45+e*(-2854/675)))-2))),this.cbg[0]=e*(e*(2/3+e*(4/3+e*(-82/45+e*(32/45+e*(4642/4725)))))-2),r*=e,this.cgb[1]=r*(7/3+e*(e*(-227/45+e*(2704/315+e*(2323/945)))-1.6)),this.cbg[1]=r*(5/3+e*(-16/15+e*(-13/9+e*(904/315+e*(-1522/945))))),r*=e,this.cgb[2]=r*(56/15+e*(-136/35+e*(-1262/105+e*(73814/2835)))),this.cbg[2]=r*(-26/15+e*(34/21+e*(1.6+e*(-12686/2835)))),r*=e,this.cgb[3]=r*(4279/630+e*(-332/35+e*(-399572/14175))),this.cbg[3]=r*(1237/630+e*(e*(-24832/14175)-2.4)),r*=e,this.cgb[4]=r*(4174/315+e*(-144838/6237)),this.cbg[4]=r*(-734/315+e*(109598/31185)),r*=e,this.cgb[5]=r*(601676/22275),this.cbg[5]=r*(444337/155925),r=Math.pow(e,2),this.Qn=this.k0/(1+e)*(1+r*(1/4+r*(1/64+r/256))),this.utg[0]=e*(e*(2/3+e*(-37/96+e*(1/360+e*(81/512+e*(-96199/604800)))))-.5),this.gtu[0]=e*(.5+e*(-2/3+e*(5/16+e*(41/180+e*(-127/288+e*(7891/37800)))))),this.utg[1]=r*(-1/48+e*(-1/15+e*(437/1440+e*(-46/105+e*(1118711/3870720))))),this.gtu[1]=r*(13/48+e*(e*(557/1440+e*(281/630+e*(-1983433/1935360)))-.6)),r*=e,this.utg[2]=r*(-17/480+e*(37/840+e*(209/4480+e*(-5569/90720)))),this.gtu[2]=r*(61/240+e*(-103/140+e*(15061/26880+e*(167603/181440)))),r*=e,this.utg[3]=r*(-4397/161280+e*(11/504+e*(830251/7257600))),this.gtu[3]=r*(49561/161280+e*(-179/168+e*(6601661/7257600))),r*=e,this.utg[4]=r*(-4583/161280+e*(108847/3991680)),this.gtu[4]=r*(34729/80640+e*(-3418889/1995840)),r*=e,this.utg[5]=r*(-20648693/638668800),this.gtu[5]=.6650675310896665*r;var n=Dt(this.cbg,this.lat0);this.Zb=-this.Qn*(n+function(t,e){for(var r,n=2*Math.cos(e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return Math.sin(e)*r}(this.gtu,2*n))},forward:function(t){var e=F(t.x-this.long0),r=t.y;r=Dt(this.cbg,r);var n=Math.sin(r),i=Math.cos(r),o=Math.sin(e),s=Math.cos(e);r=Math.atan2(n,s*i),e=Math.atan2(o*i,Ct(n,i*s)),e=function(t){var e=Math.abs(t);return e=function(t){var e=1+t,r=e-1;return 0===r?t:t*Math.log(e)/r}(e*(1+e/(Ct(1,e)+1))),t<0?-e:e}(Math.tan(e));var a,h,u=kt(this.gtu,2*r,2*e);return r+=u[0],e+=u[1],Math.abs(e)<=2.623395162778?(a=this.a*(this.Qn*e)+this.x0,h=this.a*(this.Qn*r+this.Zb)+this.y0):(a=1/0,h=1/0),t.x=a,t.y=h,t},inverse:function(t){var e,r,n=(t.x-this.x0)*(1/this.a),i=(t.y-this.y0)*(1/this.a);if(i=(i-this.Zb)/this.Qn,n/=this.Qn,Math.abs(n)<=2.623395162778){var o=kt(this.utg,2*i,2*n);i+=o[0],n+=o[1],n=Math.atan(At(n));var s=Math.sin(i),a=Math.cos(i),h=Math.sin(n),u=Math.cos(n);i=Math.atan2(s*u,Ct(h,u*a)),e=F((n=Math.atan2(h,u*a))+this.long0),r=Dt(this.cgb,i)}else e=1/0,r=1/0;return t.x=e,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc"]},jt={init:function(){var t=function(t,e){if(void 0===t){if((t=Math.floor(30*(F(e)+Math.PI)/Math.PI)+1)<0)return 0;if(t>60)return 60}return t}(this.zone,this.long0);if(void 0===t)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(t)-183)*c,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Lt.init.apply(this),this.forward=Lt.forward,this.inverse=Lt.inverse},names:["Universal Transverse Mercator System","utm"],dependsOn:"etmerc"};function Ft(t,e){return Math.pow((1-t)/(1+t),e)}const Rt={init:function(){var t=Math.sin(this.lat0),e=Math.cos(this.lat0);e*=e,this.rc=Math.sqrt(1-this.es)/(1-this.es*t*t),this.C=Math.sqrt(1+this.es*e*e/(1-this.es)),this.phic0=Math.asin(t/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+f)/(Math.pow(Math.tan(.5*this.lat0+f),this.C)*Ft(this.e*t,this.ratexp))},forward:function(t){var e=t.x,r=t.y;return t.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*r+f),this.C)*Ft(this.e*Math.sin(r),this.ratexp))-h,t.x=this.C*e,t},inverse:function(t){for(var e=t.x/this.C,r=t.y,n=Math.pow(Math.tan(.5*r+f)/this.K,1/this.C),i=20;i>0&&(r=2*Math.atan(n*Ft(this.e*Math.sin(t.y),-.5*this.e))-h,!(Math.abs(r-t.y)<1e-14));--i)t.y=r;return i?(t.x=e,t.y=r,t):null},names:["gauss"]},Gt={init:function(){Rt.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))},forward:function(t){var e,r,n,i;return t.x=F(t.x-this.long0),Rt.forward.apply(this,[t]),e=Math.sin(t.y),r=Math.cos(t.y),n=Math.cos(t.x),i=this.k0*this.R2/(1+this.sinc0*e+this.cosc0*r*n),t.x=i*r*Math.sin(t.x),t.y=i*(this.cosc0*e-this.sinc0*r*n),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var e,r,n,i,o;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,o=Math.sqrt(t.x*t.x+t.y*t.y)){var s=2*Math.atan2(o,this.R2);e=Math.sin(s),r=Math.cos(s),i=Math.asin(r*this.sinc0+t.y*e*this.cosc0/o),n=Math.atan2(t.x*e,o*this.cosc0*r-t.y*this.sinc0*e)}else i=this.phic0,n=0;return t.x=n,t.y=i,Rt.inverse.apply(this,[t]),t.x=F(t.x+this.long0),t},names:["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"]},Bt={init:function(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=u&&(this.k0=.5*(1+j(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=u&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=u&&(this.k0=.5*this.cons*L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/R(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=L(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-h,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},forward:function(t){var e,r,n,i,o,s,a=t.x,c=t.y,l=Math.sin(c),f=Math.cos(c),p=F(a-this.long0);return Math.abs(Math.abs(a-this.long0)-Math.PI)<=u&&Math.abs(c+this.lat0)<=u?(t.x=NaN,t.y=NaN,t):this.sphere?(e=2*this.k0/(1+this.sinlat0*l+this.coslat0*f*Math.cos(p)),t.x=this.a*e*f*Math.sin(p)+this.x0,t.y=this.a*e*(this.coslat0*l-this.sinlat0*f*Math.cos(p))+this.y0,t):(r=2*Math.atan(this.ssfn_(c,l,this.e))-h,i=Math.cos(r),n=Math.sin(r),Math.abs(this.coslat0)<=u?(o=R(this.e,c*this.con,this.con*l),s=2*this.a*this.k0*o/this.cons,t.x=this.x0+s*Math.sin(a-this.long0),t.y=this.y0-this.con*s*Math.cos(a-this.long0),t):(Math.abs(this.sinlat0)<u?(e=2*this.a*this.k0/(1+i*Math.cos(p)),t.y=e*n):(e=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*n+this.cosX0*i*Math.cos(p))),t.y=e*(this.cosX0*n-this.sinX0*i*Math.cos(p))+this.y0),t.x=e*i*Math.sin(p)+this.x0,t))},inverse:function(t){var e,r,n,i,o;t.x-=this.x0,t.y-=this.y0;var s=Math.sqrt(t.x*t.x+t.y*t.y);if(this.sphere){var a=2*Math.atan(s/(2*this.a*this.k0));return e=this.long0,r=this.lat0,s<=u?(t.x=e,t.y=r,t):(r=Math.asin(Math.cos(a)*this.sinlat0+t.y*Math.sin(a)*this.coslat0/s),e=Math.abs(this.coslat0)<u?this.lat0>0?F(this.long0+Math.atan2(t.x,-1*t.y)):F(this.long0+Math.atan2(t.x,t.y)):F(this.long0+Math.atan2(t.x*Math.sin(a),s*this.coslat0*Math.cos(a)-t.y*this.sinlat0*Math.sin(a))),t.x=e,t.y=r,t)}if(Math.abs(this.coslat0)<=u){if(s<=u)return r=this.lat0,e=this.long0,t.x=e,t.y=r,t;t.x*=this.con,t.y*=this.con,n=s*this.cons/(2*this.a*this.k0),r=this.con*G(this.e,n),e=this.con*F(this.con*this.long0+Math.atan2(t.x,-1*t.y))}else i=2*Math.atan(s*this.cosX0/(2*this.a*this.k0*this.ms1)),e=this.long0,s<=u?o=this.X0:(o=Math.asin(Math.cos(i)*this.sinX0+t.y*Math.sin(i)*this.cosX0/s),e=F(this.long0+Math.atan2(t.x*Math.sin(i),s*this.cosX0*Math.cos(i)-t.y*this.sinX0*Math.sin(i)))),r=-1*G(this.e,Math.tan(.5*(h+o)));return t.x=e,t.y=r,t},names:["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"],ssfn_:function(t,e,r){return e*=r,Math.tan(.5*(h+t))*Math.pow((1-e)/(1+e),.5*r)}},Ut={init:function(){var t=this.lat0;this.lambda0=this.long0;var e=Math.sin(t),r=this.a,n=1/this.rf,i=2*n-Math.pow(n,2),o=this.e=Math.sqrt(i);this.R=this.k0*r*Math.sqrt(1-i)/(1-i*Math.pow(e,2)),this.alpha=Math.sqrt(1+i/(1-i)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(e/this.alpha);var s=Math.log(Math.tan(Math.PI/4+this.b0/2)),a=Math.log(Math.tan(Math.PI/4+t/2)),h=Math.log((1+o*e)/(1-o*e));this.K=s-this.alpha*a+this.alpha*o/2*h},forward:function(t){var e=Math.log(Math.tan(Math.PI/4-t.y/2)),r=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),n=-this.alpha*(e+r)+this.K,i=2*(Math.atan(Math.exp(n))-Math.PI/4),o=this.alpha*(t.x-this.lambda0),s=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(i)+Math.cos(this.b0)*Math.cos(o))),a=Math.asin(Math.cos(this.b0)*Math.sin(i)-Math.sin(this.b0)*Math.cos(i)*Math.cos(o));return t.y=this.R/2*Math.log((1+Math.sin(a))/(1-Math.sin(a)))+this.y0,t.x=this.R*s+this.x0,t},inverse:function(t){for(var e=t.x-this.x0,r=t.y-this.y0,n=e/this.R,i=2*(Math.atan(Math.exp(r/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(i)+Math.sin(this.b0)*Math.cos(i)*Math.cos(n)),s=Math.atan(Math.sin(n)/(Math.cos(this.b0)*Math.cos(n)-Math.sin(this.b0)*Math.tan(i))),a=this.lambda0+s/this.alpha,h=0,u=o,c=-1e3,l=0;Math.abs(u-c)>1e-7;){if(++l>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(u))/2)),c=u,u=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=a,t.y=u,t},names:["somerc"]},qt={init:function(){this.no_off=this.no_off||!1,this.no_rot=this.no_rot||!1,isNaN(this.k0)&&(this.k0=1);var t=Math.sin(this.lat0),e=Math.cos(this.lat0),r=this.e*t;this.bl=Math.sqrt(1+this.es/(1-this.es)*Math.pow(e,4)),this.al=this.a*this.bl*this.k0*Math.sqrt(1-this.es)/(1-r*r);var n,i,o=R(this.e,this.lat0,t),s=this.bl/e*Math.sqrt((1-this.es)/(1-r*r));if(s*s<1&&(s=1),isNaN(this.longc)){var a=R(this.e,this.lat1,Math.sin(this.lat1)),h=R(this.e,this.lat2,Math.sin(this.lat2));this.lat0>=0?this.el=(s+Math.sqrt(s*s-1))*Math.pow(o,this.bl):this.el=(s-Math.sqrt(s*s-1))*Math.pow(o,this.bl);var u=Math.pow(a,this.bl),c=Math.pow(h,this.bl);i=.5*((n=this.el/u)-1/n);var l=(this.el*this.el-c*u)/(this.el*this.el+c*u),f=(c-u)/(c+u),p=F(this.long1-this.long2);this.long0=.5*(this.long1+this.long2)-Math.atan(l*Math.tan(.5*this.bl*p)/f)/this.bl,this.long0=F(this.long0);var d=F(this.long1-this.long0);this.gamma0=Math.atan(Math.sin(this.bl*d)/i),this.alpha=Math.asin(s*Math.sin(this.gamma0))}else n=this.lat0>=0?s+Math.sqrt(s*s-1):s-Math.sqrt(s*s-1),this.el=n*Math.pow(o,this.bl),i=.5*(n-1/n),this.gamma0=Math.asin(Math.sin(this.alpha)/s),this.long0=this.longc-Math.asin(i*Math.tan(this.gamma0))/this.bl;this.no_off?this.uc=0:this.lat0>=0?this.uc=this.al/this.bl*Math.atan2(Math.sqrt(s*s-1),Math.cos(this.alpha)):this.uc=-1*this.al/this.bl*Math.atan2(Math.sqrt(s*s-1),Math.cos(this.alpha))},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0);if(Math.abs(Math.abs(o)-h)<=u)n=o>0?-1:1,r=this.al/this.bl*Math.log(Math.tan(f+n*this.gamma0*.5)),e=-1*n*h*this.al/this.bl;else{var a=R(this.e,o,Math.sin(o)),c=this.el/Math.pow(a,this.bl),l=.5*(c-1/c),p=.5*(c+1/c),d=Math.sin(this.bl*s),y=(l*Math.sin(this.gamma0)-d*Math.cos(this.gamma0))/p;r=Math.abs(Math.abs(y)-1)<=u?Number.POSITIVE_INFINITY:.5*this.al*Math.log((1-y)/(1+y))/this.bl,e=Math.abs(Math.cos(this.bl*s))<=u?this.al*this.bl*s:this.al*Math.atan2(l*Math.cos(this.gamma0)+d*Math.sin(this.gamma0),Math.cos(this.bl*s))/this.bl}return this.no_rot?(t.x=this.x0+e,t.y=this.y0+r):(e-=this.uc,t.x=this.x0+r*Math.cos(this.alpha)+e*Math.sin(this.alpha),t.y=this.y0+e*Math.cos(this.alpha)-r*Math.sin(this.alpha)),t},inverse:function(t){var e,r;this.no_rot?(r=t.y-this.y0,e=t.x-this.x0):(r=(t.x-this.x0)*Math.cos(this.alpha)-(t.y-this.y0)*Math.sin(this.alpha),e=(t.y-this.y0)*Math.cos(this.alpha)+(t.x-this.x0)*Math.sin(this.alpha),e+=this.uc);var n=Math.exp(-1*this.bl*r/this.al),i=.5*(n-1/n),o=.5*(n+1/n),s=Math.sin(this.bl*e/this.al),a=(s*Math.cos(this.gamma0)+i*Math.sin(this.gamma0))/o,c=Math.pow(this.el/Math.sqrt((1+a)/(1-a)),1/this.bl);return Math.abs(a-1)<u?(t.x=this.long0,t.y=h):Math.abs(a+1)<u?(t.x=this.long0,t.y=-1*h):(t.y=G(this.e,c),t.x=F(this.long0-Math.atan2(i*Math.cos(this.gamma0)-s*Math.sin(this.gamma0),Math.cos(this.bl*e/this.al))/this.bl)),t},names:["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","omerc"]},zt={init:function(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<u)){var t=this.b/this.a;this.e=Math.sqrt(1-t*t);var e=Math.sin(this.lat1),r=Math.cos(this.lat1),n=L(this.e,e,r),i=R(this.e,this.lat1,e),o=Math.sin(this.lat2),s=Math.cos(this.lat2),a=L(this.e,o,s),h=R(this.e,this.lat2,o),c=R(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>u?this.ns=Math.log(n/a)/Math.log(i/h):this.ns=e,isNaN(this.ns)&&(this.ns=e),this.f0=n/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}},forward:function(t){var e=t.x,r=t.y;Math.abs(2*Math.abs(r)-Math.PI)<=u&&(r=j(r)*(h-2e-10));var n,i,o=Math.abs(Math.abs(r)-h);if(o>u)n=R(this.e,r,Math.sin(r)),i=this.a*this.f0*Math.pow(n,this.ns);else{if((o=r*this.ns)<=0)return null;i=0}var s=this.ns*F(e-this.long0);return t.x=this.k0*(i*Math.sin(s))+this.x0,t.y=this.k0*(this.rh-i*Math.cos(s))+this.y0,t},inverse:function(t){var e,r,n,i,o,s=(t.x-this.x0)/this.k0,a=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(e=Math.sqrt(s*s+a*a),r=1):(e=-Math.sqrt(s*s+a*a),r=-1);var u=0;if(0!==e&&(u=Math.atan2(r*s,r*a)),0!==e||this.ns>0){if(r=1/this.ns,n=Math.pow(e/(this.a*this.f0),r),-9999===(i=G(this.e,n)))return null}else i=-h;return o=F(u/this.ns+this.long0),t.x=o,t.y=i,t},names:["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_2SP","lcc"]},Vt={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var e,r,n,i,o,s,a,h=t.x,u=t.y,c=F(h-this.long0);return e=Math.pow((1+this.e*Math.sin(u))/(1-this.e*Math.sin(u)),this.alfa*this.e/2),r=2*(Math.atan(this.k*Math.pow(Math.tan(u/2+this.s45),this.alfa)/e)-this.s45),n=-c*this.alfa,i=Math.asin(Math.cos(this.ad)*Math.sin(r)+Math.sin(this.ad)*Math.cos(r)*Math.cos(n)),o=Math.asin(Math.cos(r)*Math.sin(n)/Math.cos(i)),s=this.n*o,a=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(i/2+this.s45),this.n),t.y=a*Math.cos(s)/1,t.x=a*Math.sin(s)/1,this.czech||(t.y*=-1,t.x*=-1),t},inverse:function(t){var e,r,n,i,o,s,a,h=t.x;t.x=t.y,t.y=h,this.czech||(t.y*=-1,t.x*=-1),o=Math.sqrt(t.x*t.x+t.y*t.y),i=Math.atan2(t.y,t.x)/Math.sin(this.s0),n=2*(Math.atan(Math.pow(this.ro0/o,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),e=Math.asin(Math.cos(this.ad)*Math.sin(n)-Math.sin(this.ad)*Math.cos(n)*Math.cos(i)),r=Math.asin(Math.cos(n)*Math.sin(i)/Math.cos(e)),t.x=this.long0-r/this.alfa,s=e,a=0;var u=0;do{t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(e/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(s))/(1-this.e*Math.sin(s)),this.e/2))-this.s45),Math.abs(s-t.y)<1e-10&&(a=1),s=t.y,u+=1}while(0===a&&u<15);return u>=15?null:t},names:["Krovak","krovak"]};function Wt(t,e,r,n,i){return t*i-e*Math.sin(2*i)+r*Math.sin(4*i)-n*Math.sin(6*i)}function Xt(t){return 1-.25*t*(1+t/16*(3+1.25*t))}function $t(t){return.375*t*(1+.25*t*(1+.46875*t))}function Yt(t){return.05859375*t*t*(1+.75*t)}function Qt(t){return t*t*t*(35/3072)}function Kt(t,e,r){var n=e*r;return t/Math.sqrt(1-n*n)}function Ht(t){return Math.abs(t)<h?t:t-j(t)*Math.PI}function Jt(t,e,r,n,i){var o,s;o=t/e;for(var a=0;a<15;a++)if(o+=s=(t-(e*o-r*Math.sin(2*o)+n*Math.sin(4*o)-i*Math.sin(6*o)))/(e-2*r*Math.cos(2*o)+4*n*Math.cos(4*o)-6*i*Math.cos(6*o)),Math.abs(s)<=1e-10)return o;return NaN}const Zt={init:function(){this.sphere||(this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.ml0=this.a*Wt(this.e0,this.e1,this.e2,this.e3,this.lat0))},forward:function(t){var e,r,n=t.x,i=t.y;if(n=F(n-this.long0),this.sphere)e=this.a*Math.asin(Math.cos(i)*Math.sin(n)),r=this.a*(Math.atan2(Math.tan(i),Math.cos(n))-this.lat0);else{var o=Math.sin(i),s=Math.cos(i),a=Kt(this.a,this.e,o),h=Math.tan(i)*Math.tan(i),u=n*Math.cos(i),c=u*u,l=this.es*s*s/(1-this.es);e=a*u*(1-c*h*(1/6-(8-h+8*l)*c/120)),r=this.a*Wt(this.e0,this.e1,this.e2,this.e3,i)-this.ml0+a*o/s*c*(.5+(5-h+6*l)*c/24)}return t.x=e+this.x0,t.y=r+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e,r,n=t.x/this.a,i=t.y/this.a;if(this.sphere){var o=i+this.lat0;e=Math.asin(Math.sin(o)*Math.cos(n)),r=Math.atan2(Math.tan(n),Math.cos(o))}else{var s=Jt(this.ml0/this.a+i,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(s)-h)<=u)return t.x=this.long0,t.y=h,i<0&&(t.y*=-1),t;var a=Kt(this.a,this.e,Math.sin(s)),c=a*a*a/this.a/this.a*(1-this.es),l=Math.pow(Math.tan(s),2),f=n*this.a/a,p=f*f;e=s-a*Math.tan(s)/c*f*f*(.5-(1+3*l)*f*f/24),r=f*(1-p*(l/3+(1+3*l)*l*p/15))/Math.cos(s)}return t.x=F(r+this.long0),t.y=Ht(e),t},names:["Cassini","Cassini_Soldner","cass"]};function te(t,e){var r;return t>1e-7?(1-t*t)*(e/(1-(r=t*e)*r)-.5/t*Math.log((1-r)/(1+r))):2*e}const ee={init:function(){var t,e=Math.abs(this.lat0);if(Math.abs(e-h)<u?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(e)<u?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0)switch(this.qp=te(this.e,1),this.mmf=.5/(1-this.es),this.apa=function(t){var e,r=[];return r[0]=.3333333333333333*t,e=t*t,r[0]+=.17222222222222222*e,r[1]=.06388888888888888*e,e*=t,r[0]+=.10257936507936508*e,r[1]+=.0664021164021164*e,r[2]=.016415012942191543*e,r}(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=te(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var e,r,n,i,o,s,a,c,l,p,d=t.x,y=t.y;if(d=F(d-this.long0),this.sphere){if(o=Math.sin(y),p=Math.cos(y),n=Math.cos(d),this.mode===this.OBLIQ||this.mode===this.EQUIT){if((r=this.mode===this.EQUIT?1+p*n:1+this.sinph0*o+this.cosph0*p*n)<=u)return null;e=(r=Math.sqrt(2/r))*p*Math.sin(d),r*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*p*n}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(n=-n),Math.abs(y+this.lat0)<u)return null;r=f-.5*y,e=(r=2*(this.mode===this.S_POLE?Math.cos(r):Math.sin(r)))*Math.sin(d),r*=n}}else{switch(a=0,c=0,l=0,n=Math.cos(d),i=Math.sin(d),o=Math.sin(y),s=te(this.e,o),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(a=s/this.qp,c=Math.sqrt(1-a*a)),this.mode){case this.OBLIQ:l=1+this.sinb1*a+this.cosb1*c*n;break;case this.EQUIT:l=1+c*n;break;case this.N_POLE:l=h+y,s=this.qp-s;break;case this.S_POLE:l=y-h,s=this.qp+s}if(Math.abs(l)<u)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:l=Math.sqrt(2/l),r=this.mode===this.OBLIQ?this.ymf*l*(this.cosb1*a-this.sinb1*c*n):(l=Math.sqrt(2/(1+c*n)))*a*this.ymf,e=this.xmf*l*c*i;break;case this.N_POLE:case this.S_POLE:s>=0?(e=(l=Math.sqrt(s))*i,r=n*(this.mode===this.S_POLE?l:-l)):e=r=0}}return t.x=this.a*e+this.x0,t.y=this.a*r+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e,r,n,i,o,s,a,c,l,f,p=t.x/this.a,d=t.y/this.a;if(this.sphere){var y,g=0,m=0;if((r=.5*(y=Math.sqrt(p*p+d*d)))>1)return null;switch(r=2*Math.asin(r),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(m=Math.sin(r),g=Math.cos(r)),this.mode){case this.EQUIT:r=Math.abs(y)<=u?0:Math.asin(d*m/y),p*=m,d=g*y;break;case this.OBLIQ:r=Math.abs(y)<=u?this.lat0:Math.asin(g*this.sinph0+d*m*this.cosph0/y),p*=m*this.cosph0,d=(g-Math.sin(r)*this.sinph0)*y;break;case this.N_POLE:d=-d,r=h-r;break;case this.S_POLE:r-=h}e=0!==d||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(p,d):0}else{if(a=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(p/=this.dd,d*=this.dd,(s=Math.sqrt(p*p+d*d))<u)return t.x=this.long0,t.y=this.lat0,t;i=2*Math.asin(.5*s/this.rq),n=Math.cos(i),p*=i=Math.sin(i),this.mode===this.OBLIQ?(a=n*this.sinb1+d*i*this.cosb1/s,o=this.qp*a,d=s*this.cosb1*n-d*this.sinb1*i):(a=d*i/s,o=this.qp*a,d=s*n)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(d=-d),!(o=p*p+d*d))return t.x=this.long0,t.y=this.lat0,t;a=1-o/this.qp,this.mode===this.S_POLE&&(a=-a)}e=Math.atan2(p,d),f=(c=Math.asin(a))+c,r=c+(l=this.apa)[0]*Math.sin(f)+l[1]*Math.sin(f+f)+l[2]*Math.sin(f+f+f)}return t.x=F(this.long0+e),t.y=r,t},names:["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"],S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4};function re(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)}const ne={init:function(){Math.abs(this.lat1+this.lat2)<u||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=L(this.e3,this.sin_po,this.cos_po),this.qs1=te(this.e3,this.sin_po,this.cos_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=L(this.e3,this.sin_po,this.cos_po),this.qs2=te(this.e3,this.sin_po,this.cos_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=te(this.e3,this.sin_po,this.cos_po),Math.abs(this.lat1-this.lat2)>u?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var e=t.x,r=t.y;this.sin_phi=Math.sin(r),this.cos_phi=Math.cos(r);var n=te(this.e3,this.sin_phi,this.cos_phi),i=this.a*Math.sqrt(this.c-this.ns0*n)/this.ns0,o=this.ns0*F(e-this.long0),s=i*Math.sin(o)+this.x0,a=this.rh-i*Math.cos(o)+this.y0;return t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(e=Math.sqrt(t.x*t.x+t.y*t.y),n=1):(e=-Math.sqrt(t.x*t.x+t.y*t.y),n=-1),i=0,0!==e&&(i=Math.atan2(n*t.x,n*t.y)),n=e*this.ns0/this.a,this.sphere?s=Math.asin((this.c-n*n)/(2*this.ns0)):(r=(this.c-n*n)/this.ns0,s=this.phi1z(this.e3,r)),o=F(i/this.ns0+this.long0),t.x=o,t.y=s,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,e){var r,n,i,o,s=re(.5*e);if(t<u)return s;for(var a=t*t,h=1;h<=25;h++)if(s+=o=.5*(i=1-(n=t*(r=Math.sin(s)))*n)*i/Math.cos(s)*(e/(1-a)-r/i+.5/t*Math.log((1-n)/(1+n))),Math.abs(o)<=1e-7)return s;return null}},ie={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var e,r,n,i,o,s,a,h=t.x,c=t.y;return n=F(h-this.long0),e=Math.sin(c),r=Math.cos(c),i=Math.cos(n),(o=this.sin_p14*e+this.cos_p14*r*i)>0||Math.abs(o)<=u?(s=this.x0+1*this.a*r*Math.sin(n)/o,a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)/o):(s=this.x0+this.infinity_dist*r*Math.sin(n),a=this.y0+this.infinity_dist*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(e=Math.sqrt(t.x*t.x+t.y*t.y))?(i=Math.atan2(e,this.rc),r=Math.sin(i),s=re((n=Math.cos(i))*this.sin_p14+t.y*r*this.cos_p14/e),o=Math.atan2(t.x*r,e*this.cos_p14*n-t.y*this.sin_p14*r),o=F(this.long0+o)):(s=this.phic0,o=0),t.x=o,t.y=s,t},names:["gnom"]},oe={init:function(){this.sphere||(this.k0=L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var e,r,n=t.x,i=t.y,o=F(n-this.long0);if(this.sphere)e=this.x0+this.a*o*Math.cos(this.lat_ts),r=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var s=te(this.e,Math.sin(i));e=this.x0+this.a*this.k0*o,r=this.y0+this.a*s*.5/this.k0}return t.x=e,t.y=r,t},inverse:function(t){var e,r;return t.x-=this.x0,t.y-=this.y0,this.sphere?(e=F(this.long0+t.x/this.a/Math.cos(this.lat_ts)),r=Math.asin(t.y/this.a*Math.cos(this.lat_ts))):(r=function(t,e){var r=1-(1-t*t)/(2*t)*Math.log((1-t)/(1+t));if(Math.abs(Math.abs(e)-r)<1e-6)return e<0?-1*h:h;for(var n,i,o,s,a=Math.asin(.5*e),u=0;u<30;u++)if(i=Math.sin(a),o=Math.cos(a),s=t*i,a+=n=Math.pow(1-s*s,2)/(2*o)*(e/(1-t*t)-i/(1-s*s)+.5/t*Math.log((1-s)/(1+s))),Math.abs(n)<=1e-10)return a;return NaN}(this.e,2*t.y*this.k0/this.a),e=F(this.long0+t.x/(this.a*this.k0))),t.x=e,t.y=r,t},names:["cea"]},se={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)},forward:function(t){var e=t.x,r=t.y,n=F(e-this.long0),i=Ht(r-this.lat0);return t.x=this.x0+this.a*n*this.rc,t.y=this.y0+this.a*i,t},inverse:function(t){var e=t.x,r=t.y;return t.x=F(this.long0+(e-this.x0)/(this.a*this.rc)),t.y=Ht(this.lat0+(r-this.y0)/this.a),t},names:["Equirectangular","Equidistant_Cylindrical","eqc"]},ae={init:function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.ml0=this.a*Wt(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0);if(n=s*Math.sin(o),this.sphere)Math.abs(o)<=u?(e=this.a*s,r=-1*this.a*this.lat0):(e=this.a*Math.sin(n)/Math.tan(o),r=this.a*(Ht(o-this.lat0)+(1-Math.cos(n))/Math.tan(o)));else if(Math.abs(o)<=u)e=this.a*s,r=-1*this.ml0;else{var a=Kt(this.a,this.e,Math.sin(o))/Math.tan(o);e=a*Math.sin(n),r=this.a*Wt(this.e0,this.e1,this.e2,this.e3,o)-this.ml0+a*(1-Math.cos(n))}return t.x=e+this.x0,t.y=r+this.y0,t},inverse:function(t){var e,r,n,i,o,s,a,h,c;if(n=t.x-this.x0,i=t.y-this.y0,this.sphere)if(Math.abs(i+this.a*this.lat0)<=u)e=F(n/this.a+this.long0),r=0;else{var l;for(s=this.lat0+i/this.a,a=n*n/this.a/this.a+s*s,h=s,o=20;o;--o)if(h+=c=-1*(s*(h*(l=Math.tan(h))+1)-h-.5*(h*h+a)*l)/((h-s)/l-1),Math.abs(c)<=u){r=h;break}e=F(this.long0+Math.asin(n*Math.tan(h)/this.a)/Math.sin(r))}else if(Math.abs(i+this.ml0)<=u)r=0,e=F(this.long0+n/this.a);else{var f,p,d,y,g;for(s=(this.ml0+i)/this.a,a=n*n/this.a/this.a+s*s,h=s,o=20;o;--o)if(g=this.e*Math.sin(h),f=Math.sqrt(1-g*g)*Math.tan(h),p=this.a*Wt(this.e0,this.e1,this.e2,this.e3,h),d=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),h-=c=(s*(f*(y=p/this.a)+1)-y-.5*f*(y*y+a))/(this.es*Math.sin(2*h)*(y*y+a-2*s*y)/(4*f)+(s-y)*(f*d-2/Math.sin(2*h))-d),Math.abs(c)<=u){r=h;break}f=Math.sqrt(1-this.es*Math.pow(Math.sin(r),2))*Math.tan(r),e=F(this.long0+Math.asin(n*f/this.a)/Math.sin(r))}return t.x=e,t.y=r,t},names:["Polyconic","poly"]},he={init:function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},forward:function(t){var e,r=t.x,n=t.y-this.lat0,i=r-this.long0,o=n/a*1e-5,s=i,h=1,u=0;for(e=1;e<=10;e++)h*=o,u+=this.A[e]*h;var c,l=u,f=s,p=1,d=0,y=0,g=0;for(e=1;e<=6;e++)c=d*l+p*f,p=p*l-d*f,d=c,y=y+this.B_re[e]*p-this.B_im[e]*d,g=g+this.B_im[e]*p+this.B_re[e]*d;return t.x=g*this.a+this.x0,t.y=y*this.a+this.y0,t},inverse:function(t){var e,r,n=t.x,i=t.y,o=n-this.x0,s=(i-this.y0)/this.a,h=o/this.a,u=1,c=0,l=0,f=0;for(e=1;e<=6;e++)r=c*s+u*h,u=u*s-c*h,c=r,l=l+this.C_re[e]*u-this.C_im[e]*c,f=f+this.C_im[e]*u+this.C_re[e]*c;for(var p=0;p<this.iterations;p++){var d,y=l,g=f,m=s,v=h;for(e=2;e<=6;e++)d=g*l+y*f,y=y*l-g*f,g=d,m+=(e-1)*(this.B_re[e]*y-this.B_im[e]*g),v+=(e-1)*(this.B_im[e]*y+this.B_re[e]*g);y=1,g=0;var w=this.B_re[1],b=this.B_im[1];for(e=2;e<=6;e++)d=g*l+y*f,y=y*l-g*f,g=d,w+=e*(this.B_re[e]*y-this.B_im[e]*g),b+=e*(this.B_im[e]*y+this.B_re[e]*g);var M=w*w+b*b;l=(m*w+v*b)/M,f=(v*w-m*b)/M}var _=l,x=f,E=1,S=0;for(e=1;e<=9;e++)E*=_,S+=this.D[e]*E;var O=this.lat0+S*a*1e5,T=this.long0+x;return t.x=T,t.y=O,t},names:["New_Zealand_Map_Grid","nzmg"]},ue={init:function(){},forward:function(t){var e=t.x,r=t.y,n=F(e-this.long0),i=this.x0+this.a*n,o=this.y0+this.a*Math.log(Math.tan(Math.PI/4+r/2.5))*1.25;return t.x=i,t.y=o,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e=F(this.long0+t.x/this.a),r=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Math.PI/4);return t.x=e,t.y=r,t},names:["Miller_Cylindrical","mill"]},ce={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Tt(this.es)},forward:function(t){var e,r,n=t.x,i=t.y;if(n=F(n-this.long0),this.sphere){if(this.m)for(var o=this.n*Math.sin(i),s=20;s;--s){var a=(this.m*i+Math.sin(i)-o)/(this.m+Math.cos(i));if(i-=a,Math.abs(a)<u)break}else i=1!==this.n?Math.asin(this.n*Math.sin(i)):i;e=this.a*this.C_x*n*(this.m+Math.cos(i)),r=this.a*this.C_y*i}else{var h=Math.sin(i),c=Math.cos(i);r=this.a*It(i,h,c,this.en),e=this.a*n*c/Math.sqrt(1-this.es*h*h)}return t.x=e,t.y=r,t},inverse:function(t){var e,r,n;return t.x-=this.x0,r=t.x/this.a,t.y-=this.y0,e=t.y/this.a,this.sphere?(e/=this.C_y,r/=this.C_x*(this.m+Math.cos(e)),this.m?e=re((this.m*e+Math.sin(e))/this.n):1!==this.n&&(e=re(Math.sin(e)/this.n)),r=F(r+this.long0),e=Ht(e)):(e=Nt(t.y/this.a,this.es,this.en),(n=Math.abs(e))<h?(n=Math.sin(e),r=F(this.long0+t.x*Math.sqrt(1-this.es*n*n)/(this.a*Math.cos(e)))):n-u<h&&(r=this.long0)),t.x=r,t.y=e,t},names:["Sinusoidal","sinu"]},le={init:function(){},forward:function(t){for(var e=t.x,r=t.y,n=F(e-this.long0),i=r,o=Math.PI*Math.sin(r);;){var s=-(i+Math.sin(i)-o)/(1+Math.cos(i));if(i+=s,Math.abs(s)<u)break}i/=2,Math.PI/2-Math.abs(r)<u&&(n=0);var a=.900316316158*this.a*n*Math.cos(i)+this.x0,h=1.4142135623731*this.a*Math.sin(i)+this.y0;return t.x=a,t.y=h,t},inverse:function(t){var e,r;t.x-=this.x0,t.y-=this.y0,r=t.y/(1.4142135623731*this.a),Math.abs(r)>.999999999999&&(r=.999999999999),e=Math.asin(r);var n=F(this.long0+t.x/(.900316316158*this.a*Math.cos(e)));n<-Math.PI&&(n=-Math.PI),n>Math.PI&&(n=Math.PI),r=(2*e+Math.sin(2*e))/Math.PI,Math.abs(r)>1&&(r=1);var i=Math.asin(r);return t.x=n,t.y=i,t},names:["Mollweide","moll"]},fe={init:function(){Math.abs(this.lat1+this.lat2)<u||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=L(this.e,this.sinphi,this.cosphi),this.ml1=Wt(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<u?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=L(this.e,this.sinphi,this.cosphi),this.ml2=Wt(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=Wt(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))},forward:function(t){var e,r=t.x,n=t.y;if(this.sphere)e=this.a*(this.g-n);else{var i=Wt(this.e0,this.e1,this.e2,this.e3,n);e=this.a*(this.g-i)}var o=this.ns*F(r-this.long0),s=this.x0+e*Math.sin(o),a=this.y0+this.rh-e*Math.cos(o);return t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i;t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns>=0?(r=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(r=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1);var o=0;return 0!==r&&(o=Math.atan2(e*t.x,e*t.y)),this.sphere?(i=F(this.long0+o/this.ns),n=Ht(this.g-r/this.a),t.x=i,t.y=n,t):(n=Jt(this.g-r/this.a,this.e0,this.e1,this.e2,this.e3),i=F(this.long0+o/this.ns),t.x=i,t.y=n,t)},names:["Equidistant_Conic","eqdc"]},pe={init:function(){this.R=this.a},forward:function(t){var e,r,n=t.x,i=t.y,o=F(n-this.long0);Math.abs(i)<=u&&(e=this.x0+this.R*o,r=this.y0);var s=re(2*Math.abs(i/Math.PI));(Math.abs(o)<=u||Math.abs(Math.abs(i)-h)<=u)&&(e=this.x0,r=i>=0?this.y0+Math.PI*this.R*Math.tan(.5*s):this.y0+Math.PI*this.R*-Math.tan(.5*s));var a=.5*Math.abs(Math.PI/o-o/Math.PI),c=a*a,l=Math.sin(s),f=Math.cos(s),p=f/(l+f-1),d=p*p,y=p*(2/l-1),g=y*y,m=Math.PI*this.R*(a*(p-g)+Math.sqrt(c*(p-g)*(p-g)-(g+c)*(d-g)))/(g+c);o<0&&(m=-m),e=this.x0+m;var v=c+p;return m=Math.PI*this.R*(y*v-a*Math.sqrt((g+c)*(c+1)-v*v))/(g+c),r=i>=0?this.y0+m:this.y0-m,t.x=e,t.y=r,t},inverse:function(t){var e,r,n,i,o,s,a,h,c,l,f,p;return t.x-=this.x0,t.y-=this.y0,f=Math.PI*this.R,o=(n=t.x/f)*n+(i=t.y/f)*i,f=3*(i*i/(h=-2*(s=-Math.abs(i)*(1+o))+1+2*i*i+o*o)+(2*(a=s-2*i*i+n*n)*a*a/h/h/h-9*s*a/h/h)/27)/(c=(s-a*a/3/h)/h)/(l=2*Math.sqrt(-c/3)),Math.abs(f)>1&&(f=f>=0?1:-1),p=Math.acos(f)/3,r=t.y>=0?(-l*Math.cos(p+Math.PI/3)-a/3/h)*Math.PI:-(-l*Math.cos(p+Math.PI/3)-a/3/h)*Math.PI,e=Math.abs(n)<u?this.long0:F(this.long0+Math.PI*(o-1+Math.sqrt(1+2*(n*n-i*i)+o*o))/2/n),t.x=e,t.y=r,t},names:["Van_der_Grinten_I","VanDerGrinten","vandg"]},de={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var e,r,n,i,o,s,a,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S=t.x,O=t.y,T=Math.sin(t.y),I=Math.cos(t.y),N=F(S-this.long0);return this.sphere?Math.abs(this.sin_p12-1)<=u?(t.x=this.x0+this.a*(h-O)*Math.sin(N),t.y=this.y0-this.a*(h-O)*Math.cos(N),t):Math.abs(this.sin_p12+1)<=u?(t.x=this.x0+this.a*(h+O)*Math.sin(N),t.y=this.y0+this.a*(h+O)*Math.cos(N),t):(b=this.sin_p12*T+this.cos_p12*I*Math.cos(N),w=(v=Math.acos(b))?v/Math.sin(v):1,t.x=this.x0+this.a*w*I*Math.sin(N),t.y=this.y0+this.a*w*(this.cos_p12*T-this.sin_p12*I*Math.cos(N)),t):(e=Xt(this.es),r=$t(this.es),n=Yt(this.es),i=Qt(this.es),Math.abs(this.sin_p12-1)<=u?(o=this.a*Wt(e,r,n,i,h),s=this.a*Wt(e,r,n,i,O),t.x=this.x0+(o-s)*Math.sin(N),t.y=this.y0-(o-s)*Math.cos(N),t):Math.abs(this.sin_p12+1)<=u?(o=this.a*Wt(e,r,n,i,h),s=this.a*Wt(e,r,n,i,O),t.x=this.x0+(o+s)*Math.sin(N),t.y=this.y0+(o+s)*Math.cos(N),t):(a=T/I,c=Kt(this.a,this.e,this.sin_p12),l=Kt(this.a,this.e,T),f=Math.atan((1-this.es)*a+this.es*c*this.sin_p12/(l*I)),M=0===(p=Math.atan2(Math.sin(N),this.cos_p12*Math.tan(f)-this.sin_p12*Math.cos(N)))?Math.asin(this.cos_p12*Math.sin(f)-this.sin_p12*Math.cos(f)):Math.abs(Math.abs(p)-Math.PI)<=u?-Math.asin(this.cos_p12*Math.sin(f)-this.sin_p12*Math.cos(f)):Math.asin(Math.sin(N)*Math.cos(f)/Math.sin(p)),d=this.e*this.sin_p12/Math.sqrt(1-this.es),v=c*M*(1-(_=M*M)*(m=(y=this.e*this.cos_p12*Math.cos(p)/Math.sqrt(1-this.es))*y)*(1-m)/6+(x=_*M)/8*(g=d*y)*(1-2*m)+(E=x*M)/120*(m*(4-7*m)-3*d*d*(1-7*m))-E*M/48*g),t.x=this.x0+v*Math.sin(p),t.y=this.y0+v*Math.cos(p),t))},inverse:function(t){var e,r,n,i,o,s,a,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S;if(t.x-=this.x0,t.y-=this.y0,this.sphere){if((e=Math.sqrt(t.x*t.x+t.y*t.y))>2*h*this.a)return;return r=e/this.a,n=Math.sin(r),i=Math.cos(r),o=this.long0,Math.abs(e)<=u?s=this.lat0:(s=re(i*this.sin_p12+t.y*n*this.cos_p12/e),a=Math.abs(this.lat0)-h,o=Math.abs(a)<=u?this.lat0>=0?F(this.long0+Math.atan2(t.x,-t.y)):F(this.long0-Math.atan2(-t.x,t.y)):F(this.long0+Math.atan2(t.x*n,e*this.cos_p12*i-t.y*this.sin_p12*n))),t.x=o,t.y=s,t}return c=Xt(this.es),l=$t(this.es),f=Yt(this.es),p=Qt(this.es),Math.abs(this.sin_p12-1)<=u?(s=Jt(((d=this.a*Wt(c,l,f,p,h))-(e=Math.sqrt(t.x*t.x+t.y*t.y)))/this.a,c,l,f,p),o=F(this.long0+Math.atan2(t.x,-1*t.y)),t.x=o,t.y=s,t):Math.abs(this.sin_p12+1)<=u?(d=this.a*Wt(c,l,f,p,h),s=Jt(((e=Math.sqrt(t.x*t.x+t.y*t.y))-d)/this.a,c,l,f,p),o=F(this.long0+Math.atan2(t.x,t.y)),t.x=o,t.y=s,t):(e=Math.sqrt(t.x*t.x+t.y*t.y),m=Math.atan2(t.x,t.y),y=Kt(this.a,this.e,this.sin_p12),v=Math.cos(m),b=-(w=this.e*this.cos_p12*v)*w/(1-this.es),M=3*this.es*(1-b)*this.sin_p12*this.cos_p12*v/(1-this.es),E=1-b*(x=(_=e/y)-b*(1+b)*Math.pow(_,3)/6-M*(1+3*b)*Math.pow(_,4)/24)*x/2-_*x*x*x/6,g=Math.asin(this.sin_p12*Math.cos(x)+this.cos_p12*Math.sin(x)*v),o=F(this.long0+Math.asin(Math.sin(m)*Math.sin(x)/Math.cos(g))),S=Math.sin(g),s=Math.atan2((S-this.es*E*this.sin_p12)*Math.tan(g),S*(1-this.es)),t.x=o,t.y=s,t)},names:["Azimuthal_Equidistant","aeqd"]},ye={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var e,r,n,i,o,s,a,h=t.x,c=t.y;return n=F(h-this.long0),e=Math.sin(c),r=Math.cos(c),i=Math.cos(n),((o=this.sin_p14*e+this.cos_p14*r*i)>0||Math.abs(o)<=u)&&(s=1*this.a*r*Math.sin(n),a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s,a;return t.x-=this.x0,t.y-=this.y0,r=re((e=Math.sqrt(t.x*t.x+t.y*t.y))/this.a),n=Math.sin(r),i=Math.cos(r),s=this.long0,Math.abs(e)<=u?(a=this.lat0,t.x=s,t.y=a,t):(a=re(i*this.sin_p14+t.y*n*this.cos_p14/e),o=Math.abs(this.lat0)-h,Math.abs(o)<=u?(s=this.lat0>=0?F(this.long0+Math.atan2(t.x,-t.y)):F(this.long0-Math.atan2(-t.x,t.y)),t.x=s,t.y=a,t):(s=F(this.long0+Math.atan2(t.x*n,e*this.cos_p14*i-t.y*this.sin_p14*n)),t.x=s,t.y=a,t))},names:["ortho"]};function ge(t,e,r,n){var i;return t<u?(n.value=1,i=0):(i=Math.atan2(e,r),Math.abs(i)<=f?n.value=1:i>f&&i<=h+f?(n.value=2,i-=h):i>h+f||i<=-(h+f)?(n.value=3,i=i>=0?i-d:i+d):(n.value=4,i+=h)),i}function me(t,e){var r=t+e;return r<-d?r+=p:r>+d&&(r-=p),r}const ve={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=h-f/2?this.face=5:this.lat0<=-(h-f/2)?this.face=6:Math.abs(this.long0)<=f?this.face=1:Math.abs(this.long0)<=h+f?this.face=this.long0>0?2:4:this.face=3,0!==this.es&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)},forward:function(t){var e,r,n,i,o,s,a={x:0,y:0},u={value:0};if(t.x-=this.long0,e=0!==this.es?Math.atan(this.one_minus_f_squared*Math.tan(t.y)):t.y,r=t.x,5===this.face)i=h-e,r>=f&&r<=h+f?(u.value=1,n=r-h):r>h+f||r<=-(h+f)?(u.value=2,n=r>0?r-d:r+d):r>-(h+f)&&r<=-f?(u.value=3,n=r+h):(u.value=4,n=r);else if(6===this.face)i=h+e,r>=f&&r<=h+f?(u.value=1,n=-r+h):r<f&&r>=-f?(u.value=2,n=-r):r<-f&&r>=-(h+f)?(u.value=3,n=-r-h):(u.value=4,n=r>0?-r+d:-r-d);else{var c,l,p,y,g,m;2===this.face?r=me(r,+h):3===this.face?r=me(r,+d):4===this.face&&(r=me(r,-h)),y=Math.sin(e),g=Math.cos(e),m=Math.sin(r),c=g*Math.cos(r),l=g*m,p=y,1===this.face?n=ge(i=Math.acos(c),p,l,u):2===this.face?n=ge(i=Math.acos(l),p,-c,u):3===this.face?n=ge(i=Math.acos(-c),p,-l,u):4===this.face?n=ge(i=Math.acos(-l),p,c,u):(i=n=0,u.value=1)}return s=Math.atan(12/d*(n+Math.acos(Math.sin(n)*Math.cos(f))-h)),o=Math.sqrt((1-Math.cos(i))/(Math.cos(s)*Math.cos(s))/(1-Math.cos(Math.atan(1/Math.cos(n))))),2===u.value?s+=h:3===u.value?s+=d:4===u.value&&(s+=1.5*d),a.x=o*Math.cos(s),a.y=o*Math.sin(s),a.x=a.x*this.a+this.x0,a.y=a.y*this.a+this.y0,t.x=a.x,t.y=a.y,t},inverse:function(t){var e,r,n,i,o,s,a,u,c,l,f,p,y={lam:0,phi:0},g={value:0};if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,r=Math.atan(Math.sqrt(t.x*t.x+t.y*t.y)),e=Math.atan2(t.y,t.x),t.x>=0&&t.x>=Math.abs(t.y)?g.value=1:t.y>=0&&t.y>=Math.abs(t.x)?(g.value=2,e-=h):t.x<0&&-t.x>=Math.abs(t.y)?(g.value=3,e=e<0?e+d:e-d):(g.value=4,e+=h),c=d/12*Math.tan(e),o=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),s=Math.atan(o),(a=1-(n=Math.cos(e))*n*(i=Math.tan(r))*i*(1-Math.cos(Math.atan(1/Math.cos(s)))))<-1?a=-1:a>1&&(a=1),5===this.face)u=Math.acos(a),y.phi=h-u,1===g.value?y.lam=s+h:2===g.value?y.lam=s<0?s+d:s-d:3===g.value?y.lam=s-h:y.lam=s;else if(6===this.face)u=Math.acos(a),y.phi=u-h,1===g.value?y.lam=-s+h:2===g.value?y.lam=-s:3===g.value?y.lam=-s-h:y.lam=s<0?-s-d:-s+d;else{var m,v,w;c=(m=a)*m,v=(c+=(w=c>=1?0:Math.sqrt(1-c)*Math.sin(s))*w)>=1?0:Math.sqrt(1-c),2===g.value?(c=v,v=-w,w=c):3===g.value?(v=-v,w=-w):4===g.value&&(c=v,v=w,w=-c),2===this.face?(c=m,m=-v,v=c):3===this.face?(m=-m,v=-v):4===this.face&&(c=m,m=v,v=-c),y.phi=Math.acos(-w)-h,y.lam=Math.atan2(v,m),2===this.face?y.lam=me(y.lam,-h):3===this.face?y.lam=me(y.lam,-d):4===this.face&&(y.lam=me(y.lam,+h))}return 0!==this.es&&(l=y.phi<0?1:0,f=Math.tan(y.phi),p=this.b/Math.sqrt(f*f+this.one_minus_f_squared),y.phi=Math.atan(Math.sqrt(this.a*this.a-p*p)/(this.one_minus_f*p)),l&&(y.phi=-y.phi)),y.lam+=this.long0,t.x=y.lam,t.y=y.phi,t},names:["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"]};var we=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-9.86701e-7],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,1.8736e-8],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,9.34959e-7],[.7986,-.00755338,-500009e-10,9.35324e-7],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],be=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-1.26793e-9,4.22642e-10],[.124,.0124,5.07171e-9,-1.60604e-9],[.186,.0123999,-1.90189e-8,6.00152e-9],[.248,.0124002,7.10039e-8,-2.24e-8],[.31,.0123992,-2.64997e-7,8.35986e-8],[.372,.0124029,9.88983e-7,-3.11994e-7],[.434,.0123893,-369093e-11,-4.35621e-7],[.4958,.0123198,-102252e-10,-3.45523e-7],[.5571,.0121916,-154081e-10,-5.82288e-7],[.6176,.0119938,-241424e-10,-5.25327e-7],[.6769,.011713,-320223e-10,-5.16405e-7],[.7346,.0113541,-397684e-10,-6.09052e-7],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-1.40374e-9],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Me=.8487,_e=1.3523,xe=function(t,e){return t[0]+e*(t[1]+e*(t[2]+e*t[3]))};const Ee={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"},forward:function(t){var e=F(t.x-this.long0),r=Math.abs(t.y),n=Math.floor(11.459155902616464*r);n<0?n=0:n>=18&&(n=17);var i={x:xe(we[n],r=l*(r-.08726646259971647*n))*e,y:xe(be[n],r)};return t.y<0&&(i.y=-i.y),i.x=i.x*this.a*Me+this.x0,i.y=i.y*this.a*_e+this.y0,i},inverse:function(t){var e={x:(t.x-this.x0)/(this.a*Me),y:Math.abs(t.y-this.y0)/(this.a*_e)};if(e.y>=1)e.x/=we[18][0],e.y=t.y<0?-h:h;else{var r=Math.floor(18*e.y);for(r<0?r=0:r>=18&&(r=17);;)if(be[r][0]>e.y)--r;else{if(!(be[r+1][0]<=e.y))break;++r}var n=be[r],i=5*(e.y-n[0])/(be[r+1][0]-n[0]);i=function(t,e,r,n){for(var i=e;n;--n){var o=t(i);if(i-=o,Math.abs(o)<1e-10)break}return i}((function(t){return(xe(n,t)-e.y)/function(t,e){return t[1]+e*(2*t[2]+3*e*t[3])}(n,t)}),i,0,100),e.x/=xe(we[r],i),e.y=(5*r+i)*c,t.y<0&&(e.y=-e.y)}return e.x=F(e.x+this.long0),e},names:["Robinson","robin"]},Se={init:function(){this.name="geocent"},forward:function(t){return H(t,this.es,this.a)},inverse:function(t){return J(t,this.es,this.a,this.b)},names:["Geocentric","geocentric","geocent","Geocent"]};var Oe={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};const Te={init:function(){if(Object.keys(Oe).forEach(function(t){if(void 0===this[t])this[t]=Oe[t].def;else{if(Oe[t].num&&isNaN(this[t]))throw new Error("Invalid parameter value, must be numeric "+t+" = "+this[t]);Oe[t].num&&(this[t]=parseFloat(this[t]))}Oe[t].degrees&&(this[t]=this[t]*c)}.bind(this)),Math.abs(Math.abs(this.lat0)-h)<u?this.mode=this.lat0<0?1:0:Math.abs(this.lat0)<u?this.mode=2:(this.mode=3,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var t=this.tilt,e=this.azi;this.cg=Math.cos(e),this.sg=Math.sin(e),this.cw=Math.cos(t),this.sw=Math.sin(t)},forward:function(t){t.x-=this.long0;var e,r,n,i,o=Math.sin(t.y),s=Math.cos(t.y),a=Math.cos(t.x);switch(this.mode){case 3:r=this.sinph0*o+this.cosph0*s*a;break;case 2:r=s*a;break;case 1:r=-o;break;case 0:r=o}switch(e=(r=this.pn1/(this.p-r))*s*Math.sin(t.x),this.mode){case 3:r*=this.cosph0*o-this.sinph0*s*a;break;case 2:r*=o;break;case 0:r*=-s*a;break;case 1:r*=s*a}return i=1/((n=r*this.cg+e*this.sg)*this.sw*this.h1+this.cw),e=(e*this.cg-r*this.sg)*this.cw*i,r=n*i,t.x=e*this.a,t.y=r*this.a,t},inverse:function(t){t.x/=this.a,t.y/=this.a;var e,r,n,i={x:t.x,y:t.y};n=1/(this.pn1-t.y*this.sw),e=this.pn1*t.x*n,r=this.pn1*t.y*this.cw*n,t.x=e*this.cg+r*this.sg,t.y=r*this.cg-e*this.sg;var o=Ct(t.x,t.y);if(Math.abs(o)<u)i.x=0,i.y=t.y;else{var s,a;switch(a=1-o*o*this.pfact,a=(this.p-Math.sqrt(a))/(this.pn1/o+o/this.pn1),s=Math.sqrt(1-a*a),this.mode){case 3:i.y=Math.asin(s*this.sinph0+t.y*a*this.cosph0/o),t.y=(s-this.sinph0*Math.sin(i.y))*o,t.x*=a*this.cosph0;break;case 2:i.y=Math.asin(t.y*a/o),t.y=s*o,t.x*=a;break;case 0:i.y=Math.asin(s),t.y=-t.y;break;case 1:i.y=-Math.asin(s)}i.x=Math.atan2(t.x,t.y)}return t.x=i.x+this.long0,t.y=i.y,t},names:["Tilted_Perspective","tpers"]};var Ie;at.defaultDatum="WGS84",at.Proj=K,at.WGS84=new at.Proj("WGS84"),at.Point=xt,at.toPoint=et,at.defs=A,at.transform=nt,at.mgrs=pt,at.version="__VERSION__",(Ie=at).Proj.projections.add(Pt),Ie.Proj.projections.add(Lt),Ie.Proj.projections.add(jt),Ie.Proj.projections.add(Gt),Ie.Proj.projections.add(Bt),Ie.Proj.projections.add(Ut),Ie.Proj.projections.add(qt),Ie.Proj.projections.add(zt),Ie.Proj.projections.add(Vt),Ie.Proj.projections.add(Zt),Ie.Proj.projections.add(ee),Ie.Proj.projections.add(ne),Ie.Proj.projections.add(ie),Ie.Proj.projections.add(oe),Ie.Proj.projections.add(se),Ie.Proj.projections.add(ae),Ie.Proj.projections.add(he),Ie.Proj.projections.add(ue),Ie.Proj.projections.add(ce),Ie.Proj.projections.add(le),Ie.Proj.projections.add(fe),Ie.Proj.projections.add(pe),Ie.Proj.projections.add(de),Ie.Proj.projections.add(ye),Ie.Proj.projections.add(ve),Ie.Proj.projections.add(Ee),Ie.Proj.projections.add(Se),Ie.Proj.projections.add(Te);const Ne=at,Pe=[{title:"RGF93 (Lambert-93)",url:"http://spatialreference.org/ref/epsg/rgf93-lambert-93/",code:"EPSG:2154",proj4:"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC50)",code:"EPSG:3950",url:"http://spatialreference.org/ref/epsg/3950/",proj4:"+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC49)",code:"EPSG:3949",url:"http://spatialreference.org/ref/epsg/3949/",proj4:"+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC48)",code:"EPSG:3948",url:"http://spatialreference.org/ref/epsg/3948/",proj4:"+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC47)",code:"EPSG:3947",url:"http://spatialreference.org/ref/epsg/3947/",proj4:"+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC46)",code:"EPSG:3946",url:"http://spatialreference.org/ref/epsg/3946/",proj4:"+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC45)",code:"EPSG:3945",url:"http://spatialreference.org/ref/epsg/3945/",proj4:"+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC44)",code:"EPSG:3944",url:"http://spatialreference.org/ref/epsg/3944/",proj4:"+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC43)",code:"EPSG:3943",url:"http://spatialreference.org/ref/epsg/3943/",proj4:"+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC42)",code:"EPSG:3942",url:"http://spatialreference.org/ref/epsg/3942/",proj4:"+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"NTF (Lambert II)",code:"EPSG:27572",url:"http://spatialreference.org/ref/epsg/27572/",proj4:"+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},{title:"NTF (Lambert III)",code:"EPSG:27573",url:"http://spatialreference.org/ref/epsg/27573/",proj4:"+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},{title:"NTF",code:"EPSG:4275",url:"http://spatialreference.org/ref/epsg/4275/",proj4:"+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs"},{title:"WGS84",code:"EPSG:4326",url:"https://epsg.io/4326",proj4:"+proj=longlat +datum=WGS84 +no_defs"}].map((t=>[t.code,t.proj4]));Ne.defs(Pe),function(t,e){const r=6356752.314245179,n=t*t,i=r*r;Math.sqrt((n-i)/n),Math.sqrt((n-i)/i)}(6378137);var Ae=r(3742),Ce=r.n(Ae);function De(t,...e){if(0===e.length)throw new Error("You must at least provide one property.");const r=e.shift(),n=t.hasOwnProperty(r);return 0===e.length?n?t[r]:void 0:void 0!==t[r]?De(t[r],...e):void 0}function ke(t){return t.replace(/\r?\n?\t?/g,"").split(" ")}const Le={};function je(t,e){if(t in Le)return Le[t];const r=Ce()(e);return Le[t]=r,r}function Fe(t){return t*Math.PI/180}function Re(t){return 180*t/Math.PI}function Ge(t,e,r){const n=Fe(t[1]),i=Fe(t[0]),o=e/6378137,s=Math.asin(Math.sin(n)*Math.cos(o)+Math.cos(n)*Math.sin(o)*Math.cos(r));return[Re(i+Math.atan2(Math.sin(r)*Math.sin(o)*Math.cos(n),Math.cos(o)-Math.sin(n)*Math.sin(s))),Re(s)]}var Be=r(6934);function Ue(t,e,r){if(null!==t)for(var n,i,o,s,a,h,u,c,l=0,f=0,p=t.type,d="FeatureCollection"===p,y="Feature"===p,g=d?t.features.length:1,m=0;m<g;m++){a=(c=!!(u=d?t.features[m].geometry:y?t.geometry:t)&&"GeometryCollection"===u.type)?u.geometries.length:1;for(var v=0;v<a;v++){var w=0,b=0;if(null!==(s=c?u.geometries[v]:u)){h=s.coordinates;var M=s.type;switch(l=!r||"Polygon"!==M&&"MultiPolygon"!==M?0:1,M){case null:break;case"Point":if(!1===e(h,f,m,w,b))return!1;f++,w++;break;case"LineString":case"MultiPoint":for(n=0;n<h.length;n++){if(!1===e(h[n],f,m,w,b))return!1;f++,"MultiPoint"===M&&w++}"LineString"===M&&w++;break;case"Polygon":case"MultiLineString":for(n=0;n<h.length;n++){for(i=0;i<h[n].length-l;i++){if(!1===e(h[n][i],f,m,w,b))return!1;f++}"MultiLineString"===M&&w++,"Polygon"===M&&b++}"Polygon"===M&&w++;break;case"MultiPolygon":for(n=0;n<h.length;n++){for("MultiPolygon"===M&&(b=0),i=0;i<h[n].length;i++){for(o=0;o<h[n][i].length-l;o++){if(!1===e(h[n][i][o],f,m,w,b))return!1;f++}b++}w++}break;case"GeometryCollection":for(n=0;n<s.geometries.length;n++)if(!1===Ue(s.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function qe(t){var e={type:"Feature"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"properties":case"geometry":return;default:e[r]=t[r]}})),e.properties=ze(t.properties),e.geometry=Ve(t.geometry),e}function ze(t){var e={};return t?(Object.keys(t).forEach((function(r){var n=t[r];"object"==typeof n?null===n?e[r]=null:n.length?e[r]=n.map((function(t){return t})):e[r]=ze(n):e[r]=n})),e):e}function Ve(t){var e={type:t.type};return t.bbox&&(e.bbox=t.bbox),"GeometryCollection"===t.type?(e.geometries=t.geometries.map((function(t){return Ve(t)})),e):(e.coordinates=We(t.coordinates),e)}function We(t){return"object"!=typeof t[0]?t.slice():t.map((function(t){return We(t)}))}var Xe=6371008.8,$e={meters:Xe,metres:Xe,millimeters:6371008800,millimetres:6371008800,centimeters:637100880,centimetres:637100880,kilometers:6371.0088,kilometres:6371.0088,miles:3958.761333810546,nauticalmiles:3440.069546436285,inches:250826616.45599997,yards:5825721.287490856,feet:20902260.511392,radians:1,degrees:57.22891354143274};function Ye(t,e,r){if(!Je(r=r||{}))throw new Error("options is invalid");var n=r.bbox,i=r.id;if(void 0===t)throw new Error("geometry is required");if(e&&e.constructor!==Object)throw new Error("properties must be an Object");n&&function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!He(t))throw new Error("bbox must only contain numbers")}))}(n),i&&function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")}(i);var o={type:"Feature"};return i&&(o.id=i),n&&(o.bbox=n),o.properties=e||{},o.geometry=t,o}function Qe(t){if(null==t)throw new Error("degrees is required");return t%360*Math.PI/180}function Ke(t,e,r){if(null==t)throw new Error("length is required");if(!(t>=0))throw new Error("length must be a positive number");return function(t,e){if(null==t)throw new Error("radians is required");if(e&&"string"!=typeof e)throw new Error("units must be a string");var r=$e[e||"kilometers"];if(!r)throw new Error(e+" units is invalid");return t*r}(function(t,e){if(null==t)throw new Error("distance is required");if(e&&"string"!=typeof e)throw new Error("units must be a string");var r=$e[e||"kilometers"];if(!r)throw new Error(e+" units is invalid");return t/r}(t,e),r||"kilometers")}function He(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}function Je(t){return!!t&&t.constructor===Object}const Ze=function(t,e,r,n){if(!Je(n=n||{}))throw new Error("options is invalid");var i=n.units,o=n.properties;if(!t)throw new Error("origin is required");if(null==e)throw new Error("distance is required");if(null==r)throw new Error("bearing is required");if(!(e>=0))throw new Error("distance must be greater than 0");var s=Ke(e,i,"meters"),a=function(t){if(!t)throw new Error("coord is required");if("Feature"===t.type&&null!==t.geometry&&"Point"===t.geometry.type)return t.geometry.coordinates;if("Point"===t.type)return t.coordinates;if(Array.isArray(t)&&t.length>=2&&void 0===t[0].length&&void 0===t[1].length)return t;throw new Error("coord must be GeoJSON Point or an Array of numbers")}(t),h=function(t,e,r,n){var i=e/(n=void 0===n?Xe:Number(n)),o=t[0]*Math.PI/180,s=Qe(t[1]),a=Qe(r),h=i*Math.cos(a),u=s+h;Math.abs(u)>Math.PI/2&&(u=u>0?Math.PI-u:-Math.PI-u);var c=Math.log(Math.tan(u/2+Math.PI/4)/Math.tan(s/2+Math.PI/4)),l=Math.abs(c)>1e-11?h/c:Math.cos(s);return[(180*(o+i*Math.sin(a)/l)/Math.PI+540)%360-180,180*u/Math.PI]}(a,s,r);return h[0]+=h[0]-a[0]>180?-360:a[0]-h[0]>180?360:0,function(t,e,r){if(!t)throw new Error("coordinates is required");if(!Array.isArray(t))throw new Error("coordinates must be an Array");if(t.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!He(t[0])||!He(t[1]))throw new Error("coordinates must contain numbers");return Ye({type:"Point",coordinates:t},e,r)}(h,o)},tr=function(t,e,r,n){if(!(i=n=n||{})||i.constructor!==Object)throw new Error("options is invalid");var i,o=n.units,s=n.zTranslation,a=n.mutate;if(!t)throw new Error("geojson is required");if(null==e||isNaN(e))throw new Error("distance is required");if(s&&"number"!=typeof s&&isNaN(s))throw new Error("zTranslation is not a number");if(s=void 0!==s?s:0,0===e&&0===s)return t;if(null==r||isNaN(r))throw new Error("direction is required");return e<0&&(e=-e,r=-r),!1!==a&&void 0!==a||(t=function(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return qe(t);case"FeatureCollection":return function(t){var e={type:"FeatureCollection"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"features":return;default:e[r]=t[r]}})),e.features=t.features.map((function(t){return qe(t)})),e}(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return Ve(t);default:throw new Error("unknown GeoJSON type")}}(t)),Ue(t,(function(t){var n=function(t){if(!t)throw new Error("coords is required");if("Feature"===t.type&&null!==t.geometry)return t.geometry.coordinates;if(t.coordinates)return t.coordinates;if(Array.isArray(t))return t;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}(Ze(t,e,r,{units:o}));t[0]=n[0],t[1]=n[1],s&&3===t.length&&(t[2]+=s)})),t};var er=r(9118);const rr="auto_detect",nr="surfaces",ir="parcels",or="pipe_networks",sr="cg_points",ar={[ir]:function(t,e,r){const n=De(t,"LandXML","CgPoints",0,"CgPoint"),i=De(t,"LandXML","Parcels",0,"Parcel"),s={},a=[];for(let t in n){const r=n[t],i=r.$.name.replace(/ /g,"");let o=ke(r._).map((t=>parseFloat(t)));o=[o[1],o[0],o[2]],o=Ne(e,"WGS84",o),s[i]=o}for(let t in i){var h=i[t];if(void 0!==h.CoordGeom){let t=[];var u=null,c=h.CoordGeom[0].Line;for(let e in c){var l=c[e].Start[0].$.pntRef;c[e].End[0].$.pntRef,s[l]&&(t.push(s[l]),u||(u=s[l]))}if(t.length>2){t.push(u),t=[t];var f={name:h.$.name,landxmlClass:h.$.class,landxmlState:h.$.state,landxmlParcelType:h.$.parcelType,landxmlType:"parcel",landxmlColor:je(`parcel-${name}`,r.colorOpts)};a.push((0,o.polygon)(t,f))}}}return a},[nr]:function(t,e,r){const n=[],i=De(t,"LandXML","Surfaces");return i?(i.forEach((t=>{const i=t.$||{},s=i.name||"",a=i.desc,h=De(t,"Surface");Array.isArray(h)&&h.forEach((t=>{const i=s?s+" - "+t.$.name:t.$.name,h={name:i,description:a?a+" - "+t.$.desc:t.$.desc,landxmlType:"surface",landxmlColor:je(`surface-${i}`,r.colorOpts)};let u=function(t,e,r,n){const i=De(t,"SourceData",0,"Boundaries",0,"Boundary");if(!i)return[];const s=[];return i.forEach((t=>{const n=ke(De(t,"PntList3D",0)).map((t=>parseFloat(t))),i=[];for(let t=0;t<n.length;t+=3){let r=[n[t+1],n[t]];r=Ne(e,"WGS84",r),i.push(r)}i.push(i[0]),s.push((0,o.polygon)([i],r))})),s}(t,e,h);if(0!==u.length)n.push(...u);else{u=function(t,e,r,n){const i=De(t,"Definition",0,"Pnts",0,"P"),s=De(t,"Definition",0,"Faces",0,"F"),a={};i.forEach((t=>{let r=ke(t._).map((t=>parseFloat(t)));r=[r[1],r[0],r[2]],r=Ne(e,"WGS84",r);const n=t.$.id;a[n]={name:t.$.name,coords:r}}));const h=[];return s.forEach((t=>{const e=ke(t),n=[];e.forEach((t=>{const e=a[t];n.push(e.coords)})),n.push(a[e[0]].coords),h.push((0,o.polygon)([n],r))})),[...h]}(t,e,h);let r=u[0];console.error("Applying union to %s faces (%d faces to merge)",r.properties.name,u.length);for(let t=1;t<u.length-1;t++){const e=u[t+1];if(!e)return;try{r=(0,Be.Z)(r,e)}catch(r){console.error("--\x3e Could not apply union to %s (#%d)",e.properties.name,t+1)}}r.properties=h,n.push(r)}}))})),n):n},[or]:function(t,e,r){const n=[],i=De(t,"LandXML","PipeNetworks");return i?(i.forEach((t=>{const i=De(t,"PipeNetwork");if(!Array.isArray(i))return;let s={};i.forEach((t=>{const i={name:t.$.name,description:t.$.desc},a=function(t,e,r,n){const i={},s=De(t,"Structs",0,"Struct");if(Array.isArray(s))return s.forEach((t=>{const s=De(t,"Center",0),a=De(t,"RectStruct",0),h=De(t,"CircStruct",0),u=De(t,"InletStruct",0),c=De(t,"OutletStruct",0),l=De(t,"Connection",0),f=void 0!==a?"rect":void 0!==h?"circ":void 0!==u?"inlet":void 0!==c?"outlet":void 0!==l?"connection":null,p=r.name?r.name+" - "+t.$.name:t.$.name,d=Object.assign({},r,{name:p,description:r.description?r.description+" - "+t.$.desc:t.$.desc,landxmlType:"pipe_network_struct",landxmlStruct:f,landxmlElevRim:"elevRim"in t.$?parseFloat(t.$.elevRim):void 0,landxmlElevSump:"elevSump"in t.$?parseFloat(t.$.elevSump):void 0,landxmlColor:je(`pipe-network-struct-${p}`,n.colorOpts)});if(void 0!==h){const t=h.$;"diameter"in t&&(d.landxmlDiameter=parseFloat(t.diameter)),"thickness"in t&&(d.landxmlThickness=parseFloat(t.thickness))}if(void 0!==a){const t=a.$;"thickness"in t&&(d.landxmlThickness=parseFloat(t.thickness)),"length"in t&&(d.landxmlLength=parseFloat(t.length)),"width"in t&&(d.landxmlWidth=parseFloat(t.width))}const y=ke(s).map((t=>parseFloat(t)));let g,m=[y[1],y[0],y[2]];if(m=Ne(e,"WGS84",m),d.landxmlCenterLongitude=m[0],d.landxmlCenterLatitude=m[1],d.landxmlCenterAltitude=m[2],g=a?function(t,e,r,n,i){const s=(0,o.point)(t),a=(0,er.Z)(s);tr(a,r/2,270,{units:n,mutate:!0}),tr(a,e/2,0,{units:n,mutate:!0});const h=(0,er.Z)(s);tr(h,r/2,90,{units:n,mutate:!0}),tr(h,e/2,0,{units:n,mutate:!0});const u=(0,er.Z)(s);tr(u,r/2,90,{units:n,mutate:!0}),tr(u,e/2,180,{units:n,mutate:!0});const c=(0,er.Z)(s);tr(c,r/2,270,{units:n,mutate:!0}),tr(c,e/2,180,{units:n,mutate:!0});const l=[a.geometry.coordinates,h.geometry.coordinates,u.geometry.coordinates,c.geometry.coordinates,a.geometry.coordinates];return(0,o.polygon)([l],i)}(m,d.length?d.length:1,d.width?d.width:1,"meters",d):function(t,e,r,n){const i=[],s=[];for(var a=0;a<128;++a)i.push(...Ge(t,e,2*Math.PI*a/128));i.push(i[0],i[1]);for(let t=0,e=0;e<i.length;e+=2)s[t++]=i.slice(e,e+2);return(0,o.polygon)([s.reverse()],n)}(m,(d.landxmlDiameter?d.landxmlDiameter:1)/2,0,d),!g)throw new Error("Unsupported struct type");i[t.$.name]={geometry:g,center:m}})),i}(t,e,i,r);n.push(...Object.values(a).map((t=>t.geometry))),Object.assign(s,a)})),i.forEach((t=>{const e={name:t.$.name,description:t.$.desc,landxmlType:"pipe_network_pipe"},i=function(t,e,r,n,i){const s=[],a=De(t,"Pipes",0,"Pipe");if(Array.isArray(a))return a.forEach((t=>{const r=De(t,"CircPipe",0),a=n.name?n.name+" - "+t.$.name:t.$.name,h=Object.assign({},n,{name:a,description:n.description?n.description+" - "+t.$.desc:t.$.desc,landxmlColor:je(`pipe-network-pipe-${a}`,i.colorOpts)});if(void 0!==r){const t=r.$;"diameter"in t&&(h.landxmlDiameter=parseFloat(t.diameter)),"thickness"in t&&(h.landxmlThickness=parseFloat(t.thickness)),"material"in t&&(h.landxmlMaterial=t.material)}const u=e[t.$.refStart],c=e[t.$.refEnd];if(!u)throw new Error(`Cannot find pipe "${h.name}" refStart "${t.$.refStart}" !`);if(!c)throw new Error(`Cannot find pipe "${h.name}" refEnd "${t.$.refEnd}" !`);const l=(0,o.lineString)([u.center,c.center],h);s.push(l)})),s}(t,s,0,e,r);n.push(...i)}))})),n):n},[sr]:function(t,e,r){const n=[],i=De(t,"LandXML","CgPoints");return i?(i.forEach((t=>{const i=t.$||{},o=i.name||"",s=i.description||"",a=De(t,"CgPoint");Array.isArray(a)&&a.forEach((t=>{const i=o?o+" - "+t.$.name:t.$.name,a={name:i,description:s?s+" - "+t.$.desc:t.$.desc,landxmlType:"cg_point",landxmlColor:je(`point-${i}`,r.colorOpts)},h=function(t,e,r){let n=ke(t._).map((t=>parseFloat(t)));return n=[n[1],n[0],n[2]],n=Ne(e,"WGS84",n),{type:"Feature",geometry:{type:"Point",coordinates:[...n]},properties:{...r,landxmlAltitude:n[2]}}}(t,e,a);n.push(h)}))})),n):n}};class hr{constructor(){this.defaultOptions={projection:rr,enabledConverters:[nr,ir,or,sr],parser:{normalize:!0},proj4Defs:[["EPSG:28355","+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"],...Pe],featureMapper:(t,e)=>t,colorOpts:{hue:"blue",luminosity:"dark",seed:1}}}toGeoJSON(t,e={}){const r=Object.assign({},this.defaultOptions.parser,e.parser),n=new(i().Parser)(r);return this.configureProj4(e.proj4Defs),new Promise(((r,i)=>{n.parseString(t,((t,n)=>{if(t)return i(t);let o;try{o=this.convertToGeoJSON(n,e)}catch(t){return i(t)}return r(o)}))}))}convertToGeoJSON(t,e={}){const r=Object.assign({},this.defaultOptions,e),n=this.getLandXMLProjection(t,r.projection||this.defaultOptions.projection);if(!n)throw new Error("Source projection can not be found !");const i=Array.isArray(e.enabledConverters)?e.enabledConverters:this.defaultOptions.enabledConverters;let a=[];return i.forEach((e=>{if(!(e in ar))return;console.log("Executing convert '%s'...",e);const i=ar[e](t,n,r);a.push(...i)})),"function"==typeof r.featureMapper&&(a=a.map((t=>r.featureMapper(t,r)))),a.sort(((t,e)=>(0,s.Z)(t)>(0,s.Z)(e)?-1:(0,s.Z)(t)<(0,s.Z)(e)?1:0)),(0,o.featureCollection)(a)}configureProj4(t){const e=this.defaultOptions.proj4Defs.slice(0);Array.isArray(t)&&e.push(...t),Ne.defs(e)}getLandXMLProjection(t,e){if(e!==rr)return e;let r=null;return r||(r=this.findUTMProjection(t)),r}findUTMProjection(t){const e=De(t,"LandXML","CoordinateSystem",0,"$","datum"),r=De(t,"LandXML","CgPoints",0,"$","zoneNumber");let n=null;return e&&r&&(n=`+proj=utm +zone=${r} +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs `),n}}}},e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}return r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(6007),r(6821)})()}));
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2FyZWEvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9jbG9uZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2hlbHBlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9tZXRhL2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdW5pb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi91bmlvbi9ub2RlX21vZHVsZXMvQHR1cmYvaW52YXJpYW50L2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2VtaXR0ZXItY29tcG9uZW50L2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9tYXJ0aW5lei1wb2x5Z29uLWNsaXBwaW5nL2Rpc3QvbWFydGluZXoudW1kLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcmFuZG9tY29sb3IvcmFuZG9tQ29sb3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9zYXgvbGliL3NheC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmVhbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3RpbWVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9saWIvYm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL2xpYi9idWlsZGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL2xpYi9kZWZhdWx0cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9saWIvcGFyc2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL2xpYi9wcm9jZXNzb3JzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL2xpYi94bWwyanMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL0RvY3VtZW50UG9zaXRpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL05vZGVUeXBlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9VdGlsaXR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9Xcml0ZXJTdGF0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MQXR0cmlidXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxDRGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MQ2hhcmFjdGVyRGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MQ29tbWVudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRE9NQ29uZmlndXJhdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRE9NRXJyb3JIYW5kbGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxET01JbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRE9NU3RyaW5nTGlzdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRFREQXR0TGlzdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRFRERWxlbWVudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRFRERW50aXR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxEVEROb3RhdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRGVjbGFyYXRpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERvY1R5cGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERvY3VtZW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxEb2N1bWVudENCLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxEdW1teS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MTmFtZWROb2RlTWFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxOb2RlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxOb2RlTGlzdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxSYXcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTFN0cmVhbVdyaXRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MU3RyaW5nV3JpdGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxTdHJpbmdpZmllci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MVGV4dC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MV3JpdGVyQmFzZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29uc3RhbnRzL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb25zdGFudHMvUHJpbWVNZXJpZGlhbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb25zdGFudHMvdW5pdHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvbWF0Y2guanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvalN0cmluZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3drdC1wYXJzZXIvcGFyc2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvd2t0LXBhcnNlci9wcm9jZXNzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvd2t0LXBhcnNlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9kZWZzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wYXJzZUNvZGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvZXh0ZW5kLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9tc2Zuei5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vc2lnbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vYWRqdXN0X2xvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vdHNmbnouanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL3BoaTJ6LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2xvbmdsYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbWVyYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb25zdGFudHMvRWxsaXBzb2lkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbnN0YW50cy9EYXR1bS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9Qcm9qLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2Rlcml2ZUNvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9kYXR1bS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9kYXR1bVV0aWxzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2RhdHVtX3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9hZGp1c3RfYXhpcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vdG9Qb2ludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jaGVja1Nhbml0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29yZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL21ncnMvbWdycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9Qb2ludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vcGpfZW5mbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vcGpfbWxmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vcGpfaW52X21sZm4uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvdG1lcmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL3NpbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2h5cG90LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9nYXRnLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9jbGVuc19jbXBseC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vY29zaC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9ldG1lcmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2NsZW5zLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9hc2luaHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2xvZzFweS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy91dG0uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2FkanVzdF96b25lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9zcmF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2dhdXNzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3N0ZXJlYS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9zdGVyZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9zb21lcmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvb21lcmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbGNjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2tyb3Zhay5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vbWxmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZTBmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZTFmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZTJmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZTNmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vZ04uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2FkanVzdF9sYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2ltbGZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2Nhc3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL3FzZm56LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2xhZWEuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2FzaW56LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2FlYS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9nbm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2NlYS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vaXFzZm56LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2VxYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9wb2x5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL256bWcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbWlsbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9zaW51LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL21vbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvZXFkYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy92YW5kZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9hZXFkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL29ydGhvLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3FzYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9yb2Jpbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9nZW9jZW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3RwZXJzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvcHJvanMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL2xpYi9wcm9qZWN0aW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvdXRpbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL3RyYW5zZm9ybS10cmFuc2xhdGUvbm9kZV9tb2R1bGVzL0B0dXJmL21ldGEvbWFpbi5lcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL3RyYW5zZm9ybS10cmFuc2xhdGUvbm9kZV9tb2R1bGVzL0B0dXJmL2Nsb25lL21haW4uZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9yaHVtYi1kZXN0aW5hdGlvbi9ub2RlX21vZHVsZXMvQHR1cmYvaGVscGVycy9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvcmh1bWItZGVzdGluYXRpb24vbWFpbi5lcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2ludmFyaWFudC9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdHJhbnNmb3JtLXRyYW5zbGF0ZS9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdHJhbnNmb3JtLXRyYW5zbGF0ZS9ub2RlX21vZHVsZXMvQHR1cmYvaGVscGVycy9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvcGlwZS1uZXR3b3JrLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvY29udmVydGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvcGFyY2VsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvc3VyZmFjZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbGliL2NnLXBvaW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2xhbmR4bWwvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIm1ldGFfMSIsIlJBRElVUyIsInBvbHlnb25BcmVhIiwiY29vcmRzIiwidG90YWwiLCJsZW5ndGgiLCJNYXRoIiwiYWJzIiwicmluZ0FyZWEiLCJpIiwicDEiLCJwMiIsImxvd2VySW5kZXgiLCJtaWRkbGVJbmRleCIsInVwcGVySW5kZXgiLCJjb29yZHNMZW5ndGgiLCJyYWQiLCJzaW4iLCJudW0iLCJQSSIsImdlb2pzb24iLCJnZW9tUmVkdWNlIiwidmFsdWUiLCJnZW9tIiwidHlwZSIsImNvb3JkaW5hdGVzIiwiY2FsY3VsYXRlQXJlYSIsImNsb25lRmVhdHVyZSIsImNsb25lZCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvcGVydGllcyIsImNsb25lUHJvcGVydGllcyIsImdlb21ldHJ5IiwiY2xvbmVHZW9tZXRyeSIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJiYm94IiwiZ2VvbWV0cmllcyIsImciLCJkZWVwU2xpY2UiLCJzbGljZSIsImNvb3JkIiwiRXJyb3IiLCJmZWF0dXJlcyIsImZlYXR1cmUiLCJjbG9uZUZlYXR1cmVDb2xsZWN0aW9uIiwib3B0aW9ucyIsImZlYXQiLCJpZCIsInBvaW50IiwicG9seWdvbiIsIl9pIiwiY29vcmRpbmF0ZXNfMSIsInJpbmciLCJqIiwibGluZVN0cmluZyIsImZlYXR1cmVDb2xsZWN0aW9uIiwiZmMiLCJtdWx0aUxpbmVTdHJpbmciLCJtdWx0aVBvaW50IiwibXVsdGlQb2x5Z29uIiwicmFkaWFuc1RvTGVuZ3RoIiwicmFkaWFucyIsInVuaXRzIiwiZmFjdG9yIiwiZmFjdG9ycyIsImxlbmd0aFRvUmFkaWFucyIsImRpc3RhbmNlIiwicmFkaWFuc1RvRGVncmVlcyIsImlzTnVtYmVyIiwiaXNOYU4iLCJ0ZXN0IiwiZGVmaW5lUHJvcGVydHkiLCJlYXJ0aFJhZGl1cyIsImNlbnRpbWV0ZXJzIiwiY2VudGltZXRyZXMiLCJkZWdyZWVzIiwiZmVldCIsImluY2hlcyIsImtpbG9tZXRlcnMiLCJraWxvbWV0cmVzIiwibWV0ZXJzIiwibWV0cmVzIiwibWlsZXMiLCJtaWxsaW1ldGVycyIsIm1pbGxpbWV0cmVzIiwibmF1dGljYWxtaWxlcyIsInlhcmRzIiwidW5pdHNGYWN0b3JzIiwiYXJlYUZhY3RvcnMiLCJhY3JlcyIsInBvaW50cyIsInBvbHlnb25zIiwibGluZVN0cmluZ3MiLCJnZW9tZXRyeUNvbGxlY3Rpb24iLCJyb3VuZCIsInByZWNpc2lvbiIsIm11bHRpcGxpZXIiLCJwb3ciLCJsZW5ndGhUb0RlZ3JlZXMiLCJiZWFyaW5nVG9BemltdXRoIiwiYmVhcmluZyIsImFuZ2xlIiwiZGVncmVlc1RvUmFkaWFucyIsImNvbnZlcnRMZW5ndGgiLCJvcmlnaW5hbFVuaXQiLCJmaW5hbFVuaXQiLCJjb252ZXJ0QXJlYSIsImFyZWEiLCJzdGFydEZhY3RvciIsImZpbmFsRmFjdG9yIiwiaXNPYmplY3QiLCJpbnB1dCIsImNvbnN0cnVjdG9yIiwidmFsaWRhdGVCQm94IiwidmFsaWRhdGVJZCIsImluZGV4T2YiLCJyYWRpYW5zMmRlZ3JlZXMiLCJkZWdyZWVzMnJhZGlhbnMiLCJkaXN0YW5jZVRvRGVncmVlcyIsImRpc3RhbmNlVG9SYWRpYW5zIiwicmFkaWFuc1RvRGlzdGFuY2UiLCJiZWFyaW5nVG9BbmdsZSIsImNvbnZlcnREaXN0YW5jZSIsImhlbHBlcnMiLCJjb29yZEVhY2giLCJjYWxsYmFjayIsImV4Y2x1ZGVXcmFwQ29vcmQiLCJrIiwibCIsInN0b3BHIiwiZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24iLCJpc0dlb21ldHJ5Q29sbGVjdGlvbiIsIndyYXBTaHJpbmsiLCJjb29yZEluZGV4IiwiaXNGZWF0dXJlQ29sbGVjdGlvbiIsImlzRmVhdHVyZSIsInN0b3AiLCJmZWF0dXJlSW5kZXgiLCJnZW9tSW5kZXgiLCJtdWx0aUZlYXR1cmVJbmRleCIsImdlb21ldHJ5SW5kZXgiLCJnZW9tVHlwZSIsInByb3BFYWNoIiwiZmVhdHVyZUVhY2giLCJnZW9tRWFjaCIsImZlYXR1cmVQcm9wZXJ0aWVzIiwiZmVhdHVyZUJCb3giLCJmZWF0dXJlSWQiLCJ1bmRlZmluZWQiLCJmbGF0dGVuRWFjaCIsInNlZ21lbnRFYWNoIiwic2VnbWVudEluZGV4IiwicHJldmlvdXNDb29yZHMiLCJwcmV2aW91c0ZlYXR1cmVJbmRleCIsInByZXZpb3VzTXVsdGlJbmRleCIsInByZXZHZW9tSW5kZXgiLCJjdXJyZW50Q29vcmQiLCJmZWF0dXJlSW5kZXhDb29yZCIsIm11bHRpUGFydEluZGV4Q29vcmQiLCJjdXJyZW50U2VnbWVudCIsImxpbmVFYWNoIiwiY29vcmRSZWR1Y2UiLCJpbml0aWFsVmFsdWUiLCJwcmV2aW91c1ZhbHVlIiwicHJvcFJlZHVjZSIsImN1cnJlbnRQcm9wZXJ0aWVzIiwiZmVhdHVyZVJlZHVjZSIsImN1cnJlbnRGZWF0dXJlIiwiY29vcmRBbGwiLCJwdXNoIiwiY3VycmVudEdlb21ldHJ5IiwiZmxhdHRlblJlZHVjZSIsInNlZ21lbnRSZWR1Y2UiLCJzdGFydGVkIiwibGluZVJlZHVjZSIsImN1cnJlbnRMaW5lIiwiZmluZFNlZ21lbnQiLCJmaW5kUG9pbnQiLCJtYXJ0aW5leiIsImludmFyaWFudF8xIiwiaGVscGVyc18xIiwicG9seWdvbjEiLCJwb2x5Z29uMiIsImNvb3JkczEiLCJnZXRHZW9tIiwiY29vcmRzMiIsInVuaW9uZWQiLCJ1bmlvbiIsImdldENvb3JkIiwiZ2V0Q29vcmRzIiwiY29udGFpbnNOdW1iZXIiLCJnZW9qc29uVHlwZSIsIm5hbWUiLCJmZWF0dXJlT2YiLCJjb2xsZWN0aW9uT2YiLCJfYSIsImdldFR5cGUiLCJfYmFiZWxQb2x5ZmlsbCIsIk8iLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIlN0cmluZyIsInByb3RvdHlwZSIsInBhZFN0YXJ0IiwicGFkRW5kIiwic3BsaXQiLCJGdW5jdGlvbiIsImNhbGwiLCJiaW5kIiwiZ2xvYmFsIiwiT3AiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRTeW1ib2wiLCJTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsIml0ZXJhdG9yIiwiYXN5bmNJdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsInRvU3RyaW5nVGFnIiwicnVudGltZSIsInJlZ2VuZXJhdG9yUnVudGltZSIsIndyYXAiLCJHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0IiwiR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCIsIkdlblN0YXRlRXhlY3V0aW5nIiwiR2VuU3RhdGVDb21wbGV0ZWQiLCJDb250aW51ZVNlbnRpbmVsIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJ0aGlzIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXJnIiwiX19hd2FpdCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIkFzeW5jSXRlcmF0b3IiLCJhc3luYyIsImlubmVyRm4iLCJvdXRlckZuIiwidHJ5TG9jc0xpc3QiLCJpdGVyIiwibmV4dCIsInRoZW4iLCJyZXN1bHQiLCJkb25lIiwidG9TdHJpbmciLCJvYmplY3QiLCJyZXZlcnNlIiwicG9wIiwiQ29udGV4dCIsInJlc2V0Iiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJzZW50IiwiX3NlbnQiLCJkZWxlZ2F0ZSIsIm1ldGhvZCIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY2hhckF0Iiwicm9vdFJlY29yZCIsImNvbXBsZXRpb24iLCJydmFsIiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJleGNlcHRpb24iLCJjb250ZXh0IiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwicmVjb3JkIiwiZW50cnkiLCJ0cnlMb2MiLCJoYXNDYXRjaCIsImhhc0ZpbmFsbHkiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhYnJ1cHQiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImFmdGVyTG9jIiwiZmluaXNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsIml0ZXJhYmxlIiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwcm90b0dlbmVyYXRvciIsImdlbmVyYXRvciIsIl9pbnZva2UiLCJzdGF0ZSIsImRvbmVSZXN1bHQiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJ0cnlDYXRjaCIsIm1ha2VJbnZva2VNZXRob2QiLCJmbiIsIm9iaiIsImVyciIsImludm9rZSIsInJlc29sdmUiLCJyZWplY3QiLCJQcm9taXNlIiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwicHJvY2VzcyIsImRvbWFpbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwicmV0dXJuIiwiVHlwZUVycm9yIiwiaW5mbyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJpdGVyYXRvck1ldGhvZCIsIndpbmRvdyIsImJ5dGVMZW5ndGgiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInZhbGlkTGVuIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ0bXAiLCJhcnIiLCJBcnIiLCJfYnl0ZUxlbmd0aCIsImN1ckJ5dGUiLCJsZW4iLCJyZXZMb29rdXAiLCJjaGFyQ29kZUF0IiwiZnJvbUJ5dGVBcnJheSIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsInBhcnRzIiwibWF4Q2h1bmtMZW5ndGgiLCJsZW4yIiwiZW5jb2RlQ2h1bmsiLCJsb29rdXAiLCJqb2luIiwiVWludDhBcnJheSIsImNvZGUiLCJzdGFydCIsImVuZCIsIm91dHB1dCIsImJhc2U2NCIsImllZWU3NTQiLCJCdWZmZXIiLCJTbG93QnVmZmVyIiwiYWxsb2MiLCJJTlNQRUNUX01BWF9CWVRFUyIsIktfTUFYX0xFTkdUSCIsImNyZWF0ZUJ1ZmZlciIsIlJhbmdlRXJyb3IiLCJidWYiLCJlbmNvZGluZ09yT2Zmc2V0IiwiYWxsb2NVbnNhZmUiLCJmcm9tIiwiaXNBcnJheUJ1ZmZlciIsImFycmF5IiwiYnl0ZU9mZnNldCIsImZyb21BcnJheUJ1ZmZlciIsInN0cmluZyIsImVuY29kaW5nIiwiaXNFbmNvZGluZyIsImFjdHVhbCIsIndyaXRlIiwiZnJvbVN0cmluZyIsImlzQnVmZmVyIiwiY2hlY2tlZCIsImNvcHkiLCJpc0FycmF5QnVmZmVyVmlldyIsIm51bWJlcklzTmFOIiwiZnJvbUFycmF5TGlrZSIsImRhdGEiLCJmcm9tT2JqZWN0IiwiYXNzZXJ0U2l6ZSIsInNpemUiLCJsb3dlcmVkQ2FzZSIsInV0ZjhUb0J5dGVzIiwiYmFzZTY0VG9CeXRlcyIsInRvTG93ZXJDYXNlIiwic2xvd1RvU3RyaW5nIiwiaGV4U2xpY2UiLCJ1dGY4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJiYXNlNjRTbGljZSIsInV0ZjE2bGVTbGljZSIsInN3YXAiLCJiIiwibiIsIm0iLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImJ1ZmZlciIsInZhbCIsImRpciIsImFycmF5SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiaW5kZXhTaXplIiwiYXJyTGVuZ3RoIiwidmFsTGVuZ3RoIiwicmVhZCIsInJlYWRVSW50MTZCRSIsImZvdW5kSW5kZXgiLCJmb3VuZCIsImhleFdyaXRlIiwib2Zmc2V0IiwiTnVtYmVyIiwicmVtYWluaW5nIiwic3RyTGVuIiwicGFyc2VkIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsInN0ciIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImxhdGluMVdyaXRlIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJjIiwiaGkiLCJsbyIsInV0ZjE2bGVUb0J5dGVzIiwibWluIiwicmVzIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImZyb21DaGFyQ29kZSIsImFwcGx5IiwiZGVjb2RlQ29kZVBvaW50c0FycmF5Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJmb28iLCJlIiwidHlwZWRBcnJheVN1cHBvcnQiLCJjb25zb2xlIiwiZXJyb3IiLCJzcGVjaWVzIiwiZW51bWVyYWJsZSIsInBvb2xTaXplIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJhIiwieCIsInkiLCJjb25jYXQiLCJsaXN0IiwicG9zIiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwiYXJndW1lbnRzIiwiZXF1YWxzIiwiaW5zcGVjdCIsIm1heCIsIm1hdGNoIiwidGFyZ2V0IiwidGhpc1N0YXJ0IiwidGhpc0VuZCIsInRoaXNDb3B5IiwidGFyZ2V0Q29weSIsImluY2x1ZGVzIiwiaXNGaW5pdGUiLCJ0b0pTT04iLCJfYXJyIiwicmV0Iiwib3V0IiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50IiwiY2hlY2tJRUVFNzU0Iiwid3JpdGVGbG9hdCIsImxpdHRsZUVuZGlhbiIsIm5vQXNzZXJ0Iiwid3JpdGVEb3VibGUiLCJuZXdCdWYiLCJzdWJhcnJheSIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVUludEJFIiwicmVhZFVJbnQ4IiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEludExFIiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50OCIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUludExFIiwibGltaXQiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsInNldCIsIklOVkFMSURfQkFTRTY0X1JFIiwiSW5maW5pdHkiLCJsZWFkU3Vycm9nYXRlIiwidHJpbSIsInJlcGxhY2UiLCJiYXNlNjRjbGVhbiIsInNyYyIsImRzdCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaXQiLCJjb2YiLCJtc2ciLCJVTlNDT1BBQkxFUyIsIkFycmF5UHJvdG8iLCJhdCIsIlMiLCJpbmRleCIsInVuaWNvZGUiLCJDb25zdHJ1Y3RvciIsImZvcmJpZGRlbkZpZWxkIiwidG9PYmplY3QiLCJ0b0Fic29sdXRlSW5kZXgiLCJ0b0xlbmd0aCIsImNvcHlXaXRoaW4iLCJ0byIsImNvdW50IiwiaW5jIiwiYUxlbiIsImVuZFBvcyIsImZvck9mIiwiSVRFUkFUT1IiLCJ0b0lPYmplY3QiLCJJU19JTkNMVURFUyIsIiR0aGlzIiwiZWwiLCJmcm9tSW5kZXgiLCJjdHgiLCJJT2JqZWN0IiwiYXNjIiwiVFlQRSIsIiRjcmVhdGUiLCJJU19NQVAiLCJJU19GSUxURVIiLCJJU19TT01FIiwiSVNfRVZFUlkiLCJJU19GSU5EX0lOREVYIiwiTk9fSE9MRVMiLCJjYWxsYmFja2ZuIiwidGhhdCIsImYiLCJhRnVuY3Rpb24iLCJtZW1vIiwiaXNSaWdodCIsIlNQRUNJRVMiLCJvcmlnaW5hbCIsIkMiLCJzcGVjaWVzQ29uc3RydWN0b3IiLCJhcnJheVNsaWNlIiwiZmFjdG9yaWVzIiwiY29uc3RydWN0IiwiRiIsImFyZ3MiLCJwYXJ0QXJncyIsImJvdW5kIiwiVEFHIiwiQVJHIiwiVCIsIkIiLCJ0cnlHZXQiLCJjYWxsZWUiLCJkUCIsInJlZGVmaW5lQWxsIiwiYW5JbnN0YW5jZSIsIiRpdGVyRGVmaW5lIiwic3RlcCIsInNldFNwZWNpZXMiLCJERVNDUklQVE9SUyIsImZhc3RLZXkiLCJ2YWxpZGF0ZSIsIlNJWkUiLCJnZXRFbnRyeSIsIl9mIiwiZ2V0Q29uc3RydWN0b3IiLCJ3cmFwcGVyIiwiTkFNRSIsIkFEREVSIiwiX3QiLCJfbCIsImNsZWFyIiwiciIsInAiLCJ2IiwiaGFzIiwiZ2V0IiwiZGVmIiwic2V0U3Ryb25nIiwiaXRlcmF0ZWQiLCJraW5kIiwiX2siLCJjbGFzc29mIiwiZ2V0V2VhayIsImFuT2JqZWN0IiwiY3JlYXRlQXJyYXlNZXRob2QiLCIkaGFzIiwiYXJyYXlGaW5kIiwiYXJyYXlGaW5kSW5kZXgiLCJ1bmNhdWdodEZyb3plblN0b3JlIiwiVW5jYXVnaHRGcm96ZW5TdG9yZSIsImZpbmRVbmNhdWdodEZyb3plbiIsInN0b3JlIiwic3BsaWNlIiwidWZzdG9yZSIsIiRleHBvcnQiLCJyZWRlZmluZSIsIm1ldGEiLCJmYWlscyIsIiRpdGVyRGV0ZWN0Iiwic2V0VG9TdHJpbmdUYWciLCJpbmhlcml0SWZSZXF1aXJlZCIsIm1ldGhvZHMiLCJjb21tb24iLCJJU19XRUFLIiwiQmFzZSIsInByb3RvIiwiZml4TWV0aG9kIiwiS0VZIiwiZW50cmllcyIsImluc3RhbmNlIiwiSEFTTlRfQ0hBSU5JTkciLCJUSFJPV1NfT05fUFJJTUlUSVZFUyIsIkFDQ0VQVF9JVEVSQUJMRVMiLCJCVUdHWV9aRVJPIiwiJGluc3RhbmNlIiwiTkVFRCIsIkciLCJXIiwiY29yZSIsInZlcnNpb24iLCJfX2UiLCIkZGVmaW5lUHJvcGVydHkiLCJjcmVhdGVEZXNjIiwiZ2V0VGltZSIsIkRhdGUiLCIkdG9JU09TdHJpbmciLCJ0b0lTT1N0cmluZyIsImx6IiwiTmFOIiwiZCIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwicyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJ0b1ByaW1pdGl2ZSIsIk5VTUJFUiIsImhpbnQiLCJkb2N1bWVudCIsImlzIiwiY3JlYXRlRWxlbWVudCIsImdldEtleXMiLCJnT1BTIiwicElFIiwiZ2V0U3ltYm9scyIsInN5bWJvbHMiLCJpc0VudW0iLCJoaWRlIiwic291cmNlIiwib3duIiwiZXhwIiwiSVNfRk9SQ0VEIiwiSVNfR0xPQkFMIiwiSVNfU1RBVElDIiwiSVNfUFJPVE8iLCJQIiwiSVNfQklORCIsImV4cFByb3RvIiwiVSIsIlIiLCJNQVRDSCIsInJlIiwiZXhlYyIsImRlZmluZWQiLCJ3a3MiLCJyZWdleHBFeGVjIiwiUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMiLCJncm91cHMiLCJTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMiLCJvcmlnaW5hbEV4ZWMiLCJTWU1CT0wiLCJERUxFR0FURVNfVE9fU1lNQk9MIiwiREVMRUdBVEVTX1RPX0VYRUMiLCJleGVjQ2FsbGVkIiwibmF0aXZlUmVnRXhwTWV0aG9kIiwiZm5zIiwibmF0aXZlTWV0aG9kIiwicmVnZXhwIiwiYXJnMiIsImZvcmNlU3RyaW5nTWV0aG9kIiwic3RyZm4iLCJyeGZuIiwiUmVnRXhwIiwiaWdub3JlQ2FzZSIsIm11bHRpbGluZSIsInN0aWNreSIsIklTX0NPTkNBVF9TUFJFQURBQkxFIiwiZmxhdHRlbkludG9BcnJheSIsInNvdXJjZUxlbiIsImRlcHRoIiwibWFwcGVyIiwidGhpc0FyZyIsImVsZW1lbnQiLCJzcHJlYWRhYmxlIiwidGFyZ2V0SW5kZXgiLCJzb3VyY2VJbmRleCIsIm1hcEZuIiwiaXNBcnJheUl0ZXIiLCJnZXRJdGVyRm4iLCJCUkVBSyIsIlJFVFVSTiIsIml0ZXJGbiIsIl9fZyIsImRvY3VtZW50RWxlbWVudCIsInVuIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJJdGVyYXRvcnMiLCJmbG9vciIsImlzUmVnRXhwIiwiZGVzY3JpcHRvciIsIkxJQlJBUlkiLCIkaXRlckNyZWF0ZSIsIkJVR0dZIiwiS0VZUyIsIlZBTFVFUyIsInJldHVyblRoaXMiLCJERUZBVUxUIiwiSVNfU0VUIiwiRk9SQ0VEIiwiZ2V0TWV0aG9kIiwiREVGX1ZBTFVFUyIsIlZBTFVFU19CVUciLCIkbmF0aXZlIiwiJGRlZmF1bHQiLCIkZW50cmllcyIsIiRhbnlOYXRpdmUiLCJTQUZFX0NMT1NJTkciLCJyaXRlciIsInNraXBDbG9zaW5nIiwic2FmZSIsIiRleHBtMSIsImV4cG0xIiwic2lnbiIsIkVQU0lMT04iLCJFUFNJTE9OMzIiLCJNQVgzMiIsIk1JTjMyIiwiZnJvdW5kIiwiJGFicyIsIiRzaWduIiwibG9nMXAiLCJsb2ciLCJzY2FsZSIsImluTG93IiwiaW5IaWdoIiwib3V0TG93Iiwib3V0SGlnaCIsIk1FVEEiLCJzZXREZXNjIiwiaXNFeHRlbnNpYmxlIiwiRlJFRVpFIiwicHJldmVudEV4dGVuc2lvbnMiLCJzZXRNZXRhIiwidyIsIm9uRnJlZXplIiwiTWFwIiwic2hhcmVkIiwiZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCIsInRhcmdldEtleSIsInRhcmdldE1ldGFkYXRhIiwia2V5TWV0YWRhdGEiLCJNZXRhZGF0YUtleSIsIm1ldGFkYXRhTWFwIiwiTWV0YWRhdGFWYWx1ZSIsIl8iLCJtYWNyb3Rhc2siLCJPYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwiaXNOb2RlIiwiaGVhZCIsImxhc3QiLCJub3RpZnkiLCJmbHVzaCIsInBhcmVudCIsImV4aXQiLCJlbnRlciIsIm5leHRUaWNrIiwibmF2aWdhdG9yIiwic3RhbmRhbG9uZSIsInByb21pc2UiLCJ0b2dnbGUiLCJub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJvYnNlcnZlIiwiY2hhcmFjdGVyRGF0YSIsInRhc2siLCJQcm9taXNlQ2FwYWJpbGl0eSIsIiQkcmVzb2x2ZSIsIiQkcmVqZWN0IiwiJGFzc2lnbiIsImFzc2lnbiIsIkEiLCJLIiwiZFBzIiwiZW51bUJ1Z0tleXMiLCJJRV9QUk9UTyIsIkVtcHR5IiwiY3JlYXRlRGljdCIsImlmcmFtZURvY3VtZW50IiwiaWZyYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJsdCIsImNsb3NlIiwiUHJvcGVydGllcyIsIklFOF9ET01fREVGSU5FIiwiQXR0cmlidXRlcyIsImRlZmluZVByb3BlcnRpZXMiLCJyYW5kb20iLCJfX2RlZmluZVNldHRlcl9fIiwiZ09QRCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdPUE4iLCJ3aW5kb3dOYW1lcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRXaW5kb3dOYW1lcyIsIiRrZXlzIiwiaGlkZGVuS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIk9iamVjdFByb3RvIiwibmFtZXMiLCJpc0VudHJpZXMiLCJSZWZsZWN0Iiwib3duS2V5cyIsIiRwYXJzZUZsb2F0IiwiJHRyaW0iLCIkcGFyc2VJbnQiLCJ3cyIsImhleCIsInJhZGl4IiwibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCJwcm9taXNlQ2FwYWJpbGl0eSIsImJpdG1hcCIsIlNSQyIsIiR0b1N0cmluZyIsIlRPX1NUUklORyIsIlRQTCIsImlzRnVuY3Rpb24iLCJidWlsdGluRXhlYyIsInJlMSIsInJlMiIsInJlZ2V4cEZsYWdzIiwibmF0aXZlRXhlYyIsIm5hdGl2ZVJlcGxhY2UiLCJwYXRjaGVkRXhlYyIsIlVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyIsIk5QQ0dfSU5DTFVERUQiLCJsYXN0SW5kZXgiLCJyZUNvcHkiLCJyZWdFeHAiLCJyZXBsYWNlciIsInBhcnQiLCJDT0xMRUNUSU9OIiwibWFwcGluZyIsImNiIiwibmV4dEl0ZW0iLCJvZiIsImNoZWNrIiwiYnVnZ3kiLCJ0YWciLCJzdGF0IiwidWlkIiwiU0hBUkVEIiwibW9kZSIsImNvcHlyaWdodCIsIkQiLCJ0b0ludGVnZXIiLCJzZWFyY2hTdHJpbmciLCJxdW90IiwiY3JlYXRlSFRNTCIsImF0dHJpYnV0ZSIsInJlcGVhdCIsIm1heExlbmd0aCIsImZpbGxTdHJpbmciLCJsZWZ0Iiwic3RyaW5nTGVuZ3RoIiwiZmlsbFN0ciIsImludE1heExlbmd0aCIsImZpbGxMZW4iLCJzdHJpbmdGaWxsZXIiLCJjZWlsIiwic3BhY2VzIiwic3BhY2UiLCJsdHJpbSIsInJ0cmltIiwiZXhwb3J0ZXIiLCJBTElBUyIsIkZPUkNFIiwiZGVmZXIiLCJjaGFubmVsIiwicG9ydCIsImh0bWwiLCJjZWwiLCJzZXRUYXNrIiwic2V0SW1tZWRpYXRlIiwiY2xlYXJUYXNrIiwiY2xlYXJJbW1lZGlhdGUiLCJNZXNzYWdlQ2hhbm5lbCIsIkRpc3BhdGNoIiwiY291bnRlciIsInF1ZXVlIiwicnVuIiwibGlzdGVuZXIiLCJldmVudCIsIm5vdyIsInBvcnQyIiwicG9ydDEiLCJvbm1lc3NhZ2UiLCJwb3N0TWVzc2FnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJpbXBvcnRTY3JpcHRzIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsInNldFRpbWVvdXQiLCJudW1iZXIiLCJ2YWx1ZU9mIiwiJHR5cGVkIiwiJGJ1ZmZlciIsInByb3BlcnR5RGVzYyIsInRvSW5kZXgiLCJjcmVhdGVBcnJheUluY2x1ZGVzIiwiQXJyYXlJdGVyYXRvcnMiLCJhcnJheUZpbGwiLCJhcnJheUNvcHlXaXRoaW4iLCIkRFAiLCIkR09QRCIsIkFSUkFZX0JVRkZFUiIsIlNIQVJFRF9CVUZGRVIiLCJCWVRFU19QRVJfRUxFTUVOVCIsIiRBcnJheUJ1ZmZlciIsIiREYXRhVmlldyIsIkRhdGFWaWV3IiwiYXJyYXlGb3JFYWNoIiwiYXJyYXlGaWx0ZXIiLCJhcnJheVNvbWUiLCJhcnJheUV2ZXJ5IiwiYXJyYXlJbmNsdWRlcyIsImFycmF5VmFsdWVzIiwiYXJyYXlLZXlzIiwiYXJyYXlFbnRyaWVzIiwiYXJyYXlMYXN0SW5kZXhPZiIsImFycmF5UmVkdWNlIiwicmVkdWNlIiwiYXJyYXlSZWR1Y2VSaWdodCIsInJlZHVjZVJpZ2h0IiwiYXJyYXlKb2luIiwiYXJyYXlTb3J0Iiwic29ydCIsImFycmF5VG9TdHJpbmciLCJhcnJheVRvTG9jYWxlU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJUWVBFRF9DT05TVFJVQ1RPUiIsIkRFRl9DT05TVFJVQ1RPUiIsIkFMTF9DT05TVFJVQ1RPUlMiLCJDT05TVFIiLCJUWVBFRF9BUlJBWSIsIlRZUEVEIiwiVklFVyIsIldST05HX0xFTkdUSCIsIiRtYXAiLCJhbGxvY2F0ZSIsIkxJVFRMRV9FTkRJQU4iLCJVaW50MTZBcnJheSIsIkZPUkNFRF9TRVQiLCJ0b09mZnNldCIsIkJZVEVTIiwic3BlY2llc0Zyb21MaXN0IiwiZnJvbUxpc3QiLCJhZGRHZXR0ZXIiLCJpbnRlcm5hbCIsIl9kIiwiJGZyb20iLCJtYXBmbiIsIiRvZiIsIlRPX0xPQ0FMRV9CVUciLCIkdG9Mb2NhbGVTdHJpbmciLCJldmVyeSIsImZpbHRlciIsImZpbmQiLCJwcmVkaWNhdGUiLCJmaW5kSW5kZXgiLCJzZWFyY2hFbGVtZW50Iiwic2VwYXJhdG9yIiwibWlkZGxlIiwic29tZSIsImNvbXBhcmVmbiIsImJlZ2luIiwiJGJlZ2luIiwiJHNsaWNlIiwiJHNldCIsImFycmF5TGlrZSIsIiRpdGVyYXRvcnMiLCJpc1RBSW5kZXgiLCIkZ2V0RGVzYyIsIiRzZXREZXNjIiwiZGVzYyIsIiRUeXBlZEFycmF5UHJvdG90eXBlJCIsIkNMQU1QRUQiLCJHRVRURVIiLCJTRVRURVIiLCJUeXBlZEFycmF5IiwiVEFDIiwiQUJWIiwiVHlwZWRBcnJheVByb3RvdHlwZSIsImFkZEVsZW1lbnQiLCJvIiwiZ2V0dGVyIiwic2V0dGVyIiwiJG9mZnNldCIsIiRsZW5ndGgiLCJrbGFzcyIsIiRsZW4iLCIkbmF0aXZlSXRlcmF0b3IiLCJDT1JSRUNUX0lURVJfTkFNRSIsIiRpdGVyYXRvciIsIkRBVEFfVklFVyIsIldST05HX0lOREVYIiwiQmFzZUJ1ZmZlciIsIkxOMiIsIkJVRkZFUiIsIkJZVEVfTEVOR1RIIiwiQllURV9PRkZTRVQiLCIkQlVGRkVSIiwiJExFTkdUSCIsIiRPRkZTRVQiLCJwYWNrSUVFRTc1NCIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwicnQiLCJ1bnBhY2tJRUVFNzU0IiwibkJpdHMiLCJ1bnBhY2tJMzIiLCJwYWNrSTgiLCJwYWNrSTE2IiwicGFja0kzMiIsInBhY2tGNjQiLCJwYWNrRjMyIiwidmlldyIsImlzTGl0dGxlRW5kaWFuIiwiaW50SW5kZXgiLCJfYiIsInBhY2siLCJjb252ZXJzaW9uIiwiQXJyYXlCdWZmZXJQcm90byIsIiRzZXRJbnQ4Iiwic2V0SW50OCIsImdldEludDgiLCJzZXRVaW50OCIsImJ1ZmZlckxlbmd0aCIsImdldFVpbnQ4IiwiZ2V0SW50MTYiLCJnZXRVaW50MTYiLCJnZXRJbnQzMiIsImdldFVpbnQzMiIsImdldEZsb2F0MzIiLCJnZXRGbG9hdDY0Iiwic2V0SW50MTYiLCJzZXRVaW50MTYiLCJzZXRJbnQzMiIsInNldFVpbnQzMiIsInNldEZsb2F0MzIiLCJzZXRGbG9hdDY0IiwiVHlwZWQiLCJUeXBlZEFycmF5Q29uc3RydWN0b3JzIiwicHgiLCJ1c2VyQWdlbnQiLCJ3a3NFeHQiLCJVU0VfU1lNQk9MIiwiJHJlIiwiZXNjYXBlIiwiJGV2ZXJ5IiwiJGZpbHRlciIsIiRmaW5kIiwiZm9yY2VkIiwiJGZvckVhY2giLCJTVFJJQ1QiLCJjcmVhdGVQcm9wZXJ0eSIsIiRpbmRleE9mIiwiTkVHQVRJVkVfWkVSTyIsImFkZFRvVW5zY29wYWJsZXMiLCJBcmd1bWVudHMiLCIkcmVkdWNlIiwidXBUbyIsIiRzb21lIiwiJHNvcnQiLCJwdiIsIlRPX1BSSU1JVElWRSIsIkRhdGVQcm90byIsIklOVkFMSURfREFURSIsIkhBU19JTlNUQU5DRSIsIkZ1bmN0aW9uUHJvdG8iLCJGUHJvdG8iLCJuYW1lUkUiLCJzdHJvbmciLCJNQVAiLCJzcXJ0IiwiJGFjb3NoIiwiYWNvc2giLCJNQVhfVkFMVUUiLCIkYXNpbmgiLCJhc2luaCIsIiRhdGFuaCIsImF0YW5oIiwiY2JydCIsImNsejMyIiwiTE9HMkUiLCJjb3NoIiwiaHlwb3QiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJkaXYiLCJzdW0iLCJsYXJnIiwiJGltdWwiLCJpbXVsIiwiVUlOVDE2IiwieG4iLCJ5biIsInhsIiwieWwiLCJsb2cxMCIsIkxPRzEwRSIsImxvZzIiLCJzaW5oIiwiRSIsInRhbmgiLCJ0cnVuYyIsIiROdW1iZXIiLCJCUk9LRU5fQ09GIiwiVFJJTSIsInRvTnVtYmVyIiwiYXJndW1lbnQiLCJ0aGlyZCIsIm1heENvZGUiLCJmaXJzdCIsImRpZ2l0cyIsIl9pc0Zpbml0ZSIsImlzSW50ZWdlciIsImlzU2FmZUludGVnZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiTUlOX1NBRkVfSU5URUdFUiIsInBhcnNlRmxvYXQiLCJhTnVtYmVyVmFsdWUiLCIkdG9GaXhlZCIsInRvRml4ZWQiLCJFUlJPUiIsIlpFUk8iLCJtdWx0aXBseSIsImMyIiwiZGl2aWRlIiwibnVtVG9TdHJpbmciLCJ0IiwiYWNjIiwiZnJhY3Rpb25EaWdpdHMiLCJ6IiwieDIiLCIkZmFpbHMiLCIkdG9QcmVjaXNpb24iLCJ0b1ByZWNpc2lvbiIsIiRmcmVlemUiLCIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiJGdldFByb3RvdHlwZU9mIiwiJGlzRXh0ZW5zaWJsZSIsIiRpc0Zyb3plbiIsIiRpc1NlYWxlZCIsIiRwcmV2ZW50RXh0ZW5zaW9ucyIsIiRzZWFsIiwiSW50ZXJuYWwiLCJuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkiLCJPd25Qcm9taXNlQ2FwYWJpbGl0eSIsIldyYXBwZXIiLCJtaWNyb3Rhc2siLCJuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSIsInBlcmZvcm0iLCJwcm9taXNlUmVzb2x2ZSIsIlBST01JU0UiLCJ2ZXJzaW9ucyIsInY4IiwiJFByb21pc2UiLCJlbXB0eSIsIlVTRV9OQVRJVkUiLCJGYWtlUHJvbWlzZSIsIlByb21pc2VSZWplY3Rpb25FdmVudCIsImlzVGhlbmFibGUiLCJpc1JlamVjdCIsIl9uIiwiY2hhaW4iLCJfYyIsIl92Iiwib2siLCJfcyIsInJlYWN0aW9uIiwiZXhpdGVkIiwiaGFuZGxlciIsImZhaWwiLCJfaCIsIm9uSGFuZGxlVW5oYW5kbGVkIiwib25VbmhhbmRsZWQiLCJ1bmhhbmRsZWQiLCJpc1VuaGFuZGxlZCIsImVtaXQiLCJvbnVuaGFuZGxlZHJlamVjdGlvbiIsInJlYXNvbiIsIm9ucmVqZWN0aW9uaGFuZGxlZCIsIiRyZWplY3QiLCJfdyIsIiRyZXNvbHZlIiwiZXhlY3V0b3IiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYXBhYmlsaXR5IiwiYWxsIiwiJGluZGV4IiwiYWxyZWFkeUNhbGxlZCIsInJhY2UiLCJyQXBwbHkiLCJmQXBwbHkiLCJ0aGlzQXJndW1lbnQiLCJhcmd1bWVudHNMaXN0IiwiTCIsInJDb25zdHJ1Y3QiLCJORVdfVEFSR0VUX0JVRyIsIkFSR1NfQlVHIiwiVGFyZ2V0IiwibmV3VGFyZ2V0IiwiJGFyZ3MiLCJwcm9wZXJ0eUtleSIsImF0dHJpYnV0ZXMiLCJkZWxldGVQcm9wZXJ0eSIsIkVudW1lcmF0ZSIsImVudW1lcmF0ZSIsInJlY2VpdmVyIiwic2V0UHJvdG8iLCJWIiwiZXhpc3RpbmdEZXNjcmlwdG9yIiwib3duRGVzYyIsIiRmbGFncyIsIiRSZWdFeHAiLCJDT1JSRUNUX05FVyIsInRpUkUiLCJwaVJFIiwiZmlVIiwicHJveHkiLCJmbGFncyIsImFkdmFuY2VTdHJpbmdJbmRleCIsInJlZ0V4cEV4ZWMiLCIkbWF0Y2giLCJtYXliZUNhbGxOYXRpdmUiLCJyeCIsImZ1bGxVbmljb2RlIiwibWF0Y2hTdHIiLCJTVUJTVElUVVRJT05fU1lNQk9MUyIsIlNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEIiwiUkVQTEFDRSIsIiRyZXBsYWNlIiwic2VhcmNoVmFsdWUiLCJyZXBsYWNlVmFsdWUiLCJmdW5jdGlvbmFsUmVwbGFjZSIsInJlc3VsdHMiLCJhY2N1bXVsYXRlZFJlc3VsdCIsIm5leHRTb3VyY2VQb3NpdGlvbiIsIm1hdGNoZWQiLCJwb3NpdGlvbiIsImNhcHR1cmVzIiwibmFtZWRDYXB0dXJlcyIsInJlcGxhY2VyQXJncyIsInJlcGxhY2VtZW50IiwiZ2V0U3Vic3RpdHV0aW9uIiwidGFpbFBvcyIsImNoIiwiY2FwdHVyZSIsInNhbWVWYWx1ZSIsIlNFQVJDSCIsIiRzZWFyY2giLCJwcmV2aW91c0xhc3RJbmRleCIsImNhbGxSZWdFeHBFeGVjIiwiJG1pbiIsIiRwdXNoIiwiTUFYX1VJTlQzMiIsIlNVUFBPUlRTX1kiLCJTUExJVCIsIiRzcGxpdCIsImludGVybmFsU3BsaXQiLCJsYXN0TGVuZ3RoIiwibGFzdExhc3RJbmRleCIsInNwbGl0TGltaXQiLCJzZXBhcmF0b3JDb3B5Iiwic3BsaXR0ZXIiLCJ1bmljb2RlTWF0Y2hpbmciLCJsaW0iLCJxIiwiYWRkIiwiJGF0IiwiY29kZVBvaW50QXQiLCJFTkRTX1dJVEgiLCIkZW5kc1dpdGgiLCJlbmRzV2l0aCIsImVuZFBvc2l0aW9uIiwic2VhcmNoIiwiY29sb3IiLCIkZnJvbUNvZGVQb2ludCIsImZyb21Db2RlUG9pbnQiLCJJTkNMVURFUyIsInVybCIsInJhdyIsImNhbGxTaXRlIiwidHBsIiwiU1RBUlRTX1dJVEgiLCIkc3RhcnRzV2l0aCIsInN0YXJ0c1dpdGgiLCJ3a3NEZWZpbmUiLCJlbnVtS2V5cyIsIl9jcmVhdGUiLCJnT1BORXh0IiwiJEdPUFMiLCIkSlNPTiIsIkpTT04iLCJfc3RyaW5naWZ5Iiwic3RyaW5naWZ5IiwiSElEREVOIiwiU3ltYm9sUmVnaXN0cnkiLCJBbGxTeW1ib2xzIiwiT1BTeW1ib2xzIiwiUU9iamVjdCIsImZpbmRDaGlsZCIsInNldFN5bWJvbERlc2MiLCJwcm90b0Rlc2MiLCJzeW0iLCJpc1N5bWJvbCIsIiRkZWZpbmVQcm9wZXJ0aWVzIiwiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwiJGdldE93blByb3BlcnR5TmFtZXMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiSVNfT1AiLCJlczZTeW1ib2xzIiwid2VsbEtub3duU3ltYm9scyIsImtleUZvciIsInVzZVNldHRlciIsInVzZVNpbXBsZSIsIkZBSUxTX09OX1BSSU1JVElWRVMiLCIkcmVwbGFjZXIiLCIkaXNWaWV3IiwiZmluIiwidmlld1MiLCJ2aWV3VCIsImluaXQiLCJJbnRlcm5hbE1hcCIsImVhY2giLCJ3ZWFrIiwiTkFUSVZFX1dFQUtfTUFQIiwiSVNfSUUxMSIsIkFjdGl2ZVhPYmplY3QiLCJXRUFLX01BUCIsIiRXZWFrTWFwIiwiV0VBS19TRVQiLCJhcnJheVNwZWNpZXNDcmVhdGUiLCJmbGF0TWFwIiwiZmxhdHRlbiIsImRlcHRoQXJnIiwiJGluY2x1ZGVzIiwiYXNhcCIsImlzRXJyb3IiLCJjbGFtcCIsImxvd2VyIiwidXBwZXIiLCJERUdfUEVSX1JBRCIsIlJBRF9QRVJfREVHIiwiZnNjYWxlIiwiaWFkZGgiLCJ4MCIsIngxIiwieTAiLCJ5MSIsIiR4MCIsIiR5MCIsImltdWxoIiwidSIsIiR1IiwiJHYiLCJ1MCIsInYwIiwidTEiLCJ2MSIsImlzdWJoIiwic2lnbmJpdCIsInVtdWxoIiwiX19kZWZpbmVHZXR0ZXJfXyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJnZXREZXNjIiwiX19sb29rdXBHZXR0ZXJfXyIsIl9fbG9va3VwU2V0dGVyX18iLCIkdmFsdWVzIiwiT0JTRVJWQUJMRSIsImNsZWFudXBTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb24iLCJjbGVhbnVwIiwic3Vic2NyaXB0aW9uQ2xvc2VkIiwiX28iLCJjbG9zZVN1YnNjcmlwdGlvbiIsIlN1YnNjcmlwdGlvbiIsIm9ic2VydmVyIiwic3Vic2NyaWJlciIsIlN1YnNjcmlwdGlvbk9ic2VydmVyIiwidW5zdWJzY3JpYmUiLCIkT2JzZXJ2YWJsZSIsInN1YnNjcmliZSIsIm9ic2VydmFibGUiLCJpdGVtcyIsIk9ic2VydmFibGUiLCJvbkZpbmFsbHkiLCJtZXRhZGF0YSIsInRvTWV0YUtleSIsIm9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEiLCJkZWZpbmVNZXRhZGF0YSIsIm1ldGFkYXRhS2V5IiwibWV0YWRhdGFWYWx1ZSIsImRlbGV0ZU1ldGFkYXRhIiwiU2V0Iiwib3JkaW5hcnlPd25NZXRhZGF0YUtleXMiLCJvcmRpbmFyeU1ldGFkYXRhS2V5cyIsIm9LZXlzIiwicEtleXMiLCJnZXRNZXRhZGF0YUtleXMiLCJvcmRpbmFyeUhhc093bk1ldGFkYXRhIiwib3JkaW5hcnlHZXRPd25NZXRhZGF0YSIsIm9yZGluYXJ5R2V0TWV0YWRhdGEiLCJnZXRNZXRhZGF0YSIsImdldE93bk1ldGFkYXRhS2V5cyIsImdldE93bk1ldGFkYXRhIiwib3JkaW5hcnlIYXNNZXRhZGF0YSIsImhhc01ldGFkYXRhIiwiaGFzT3duTWV0YWRhdGEiLCIkbWV0YWRhdGEiLCJnZXRGbGFncyIsIlJlZ0V4cFByb3RvIiwiJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yIiwiX3IiLCJtYXRjaEFsbCIsIiRwYWQiLCJXRUJLSVRfQlVHIiwiVE9fU1RSSU5HX1RBRyIsIkFycmF5VmFsdWVzIiwiRE9NSXRlcmFibGVzIiwiQ1NTUnVsZUxpc3QiLCJDU1NTdHlsZURlY2xhcmF0aW9uIiwiQ1NTVmFsdWVMaXN0IiwiQ2xpZW50UmVjdExpc3QiLCJET01SZWN0TGlzdCIsIkRPTVN0cmluZ0xpc3QiLCJET01Ub2tlbkxpc3QiLCJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsIkZpbGVMaXN0IiwiSFRNTEFsbENvbGxlY3Rpb24iLCJIVE1MQ29sbGVjdGlvbiIsIkhUTUxGb3JtRWxlbWVudCIsIkhUTUxTZWxlY3RFbGVtZW50IiwiTWVkaWFMaXN0IiwiTWltZVR5cGVBcnJheSIsIk5hbWVkTm9kZU1hcCIsIk5vZGVMaXN0IiwiUGFpbnRSZXF1ZXN0TGlzdCIsIlBsdWdpbiIsIlBsdWdpbkFycmF5IiwiU1ZHTGVuZ3RoTGlzdCIsIlNWR051bWJlckxpc3QiLCJTVkdQYXRoU2VnTGlzdCIsIlNWR1BvaW50TGlzdCIsIlNWR1N0cmluZ0xpc3QiLCJTVkdUcmFuc2Zvcm1MaXN0IiwiU291cmNlQnVmZmVyTGlzdCIsIlN0eWxlU2hlZXRMaXN0IiwiVGV4dFRyYWNrQ3VlTGlzdCIsIlRleHRUcmFja0xpc3QiLCJUb3VjaExpc3QiLCJjb2xsZWN0aW9ucyIsImV4cGxpY2l0IiwiQ29sbGVjdGlvbiIsIiR0YXNrIiwiTVNJRSIsInRpbWUiLCJib3VuZEFyZ3MiLCJzZXRJbnRlcnZhbCIsIkVtaXR0ZXIiLCJtaXhpbiIsIm9uIiwiX2NhbGxiYWNrcyIsIm9uY2UiLCJvZmYiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjYWxsYmFja3MiLCJsaXN0ZW5lcnMiLCJoYXNMaXN0ZW5lcnMiLCJFdmVudEVtaXR0ZXIiLCJfZXZlbnRzIiwiX21heExpc3RlbmVycyIsImlzVW5kZWZpbmVkIiwiZGVmYXVsdE1heExpc3RlbmVycyIsInNldE1heExpc3RlbmVycyIsImVyIiwiYWRkTGlzdGVuZXIiLCJuZXdMaXN0ZW5lciIsIndhcm5lZCIsInRyYWNlIiwiZmlyZWQiLCJsaXN0ZW5lckNvdW50IiwiZXZsaXN0ZW5lciIsImVtaXR0ZXIiLCJpc0xFIiwiREVGQVVMVF9DT01QQVJFIiwiU3BsYXlUcmVlIiwibm9EdXBsaWNhdGVzIiwiX2NvbXBhcmUiLCJfcm9vdCIsIl9zaXplIiwiX25vRHVwbGljYXRlcyIsInByb3RvdHlwZUFjY2Vzc29ycyIsImxvYWRSZWN1cnNpdmUiLCJyaWdodCIsInBpdm90Iiwicm90YXRlTGVmdCIsInJvdGF0ZVJpZ2h0IiwiX3NwbGF5IiwidGhpcyQxIiwic3BsYXkiLCJncCIsImdncCIsIm1pbk5vZGUiLCJtYXhOb2RlIiwiaW5zZXJ0IiwiY29tcCIsImNtcCIsImNvbnRhaW5zIiwiY29tcGFyYXRvciIsInJlbW92ZSIsInJlbW92ZU5vZGUiLCJlcmFzZSIsInNNYXgiLCJyZXR1cm5WYWx1ZSIsInN1Y2Nlc3NvciIsInByZWRlY2Vzc29yIiwiY3VycmVudCIsInJhbmdlIiwibG93IiwiaGlnaCIsIlEiLCJsb2FkIiwicHJlc29ydCIsImlzRW1wdHkiLCJjcmVhdGVUcmVlIiwiY29tcHV0ZUZpZWxkcyIsIm9wZXJhdGlvbiIsImluT3V0Iiwib3RoZXJJbk91dCIsImlzU3ViamVjdCIsImlzVmVydGljYWwiLCJwcmV2SW5SZXN1bHQiLCJpblJlc3VsdCIsIlN3ZWVwRXZlbnQiLCJvdGhlckV2ZW50IiwiZWRnZVR5cGUiLCJyZXN1bHRJbk91dCIsImlzRXh0ZXJpb3JSaW5nIiwic2lnbmVkQXJlYSIsInAwIiwiY29tcGFyZUV2ZW50cyIsImUxIiwiZTIiLCJpc0JlbG93Iiwic3BlY2lhbENhc2VzIiwiZGl2aWRlU2VnbWVudCIsInNlIiwid2FybiIsImNvbnRvdXJJZCIsImNyb3NzUHJvZHVjdCIsImRvdFByb2R1Y3QiLCJwb3NzaWJsZUludGVyc2VjdGlvbiIsInNlMSIsInNlMiIsImludGVyIiwiYTEiLCJhMiIsImIxIiwiYjIiLCJub0VuZHBvaW50VG91Y2giLCJ2YSIsInZiIiwidG9Qb2ludCIsImtyb3NzIiwic3FyS3Jvc3MiLCJzcXJMZW5BIiwic2EiLCJzYiIsInNtaW4iLCJzbWF4IiwiaW50ZXJzZWN0aW9uIiwibmludGVyc2VjdGlvbnMiLCJldmVudHMiLCJsZWZ0Q29pbmNpZGUiLCJyaWdodENvaW5jaWRlIiwiY29tcGFyZVNlZ21lbnRzIiwibGUxIiwibGUyIiwiaXNBYm92ZSIsIm5leHRQb3MiLCJyZXN1bHRFdmVudHMiLCJwcm9jZXNzZWQiLCJvcmlnSW5kZXgiLCJuZXdQb3MiLCJjb25uZWN0RWRnZXMiLCJzb3J0ZWRFdmVudHMiLCJzb3J0ZWQiLCJvcmRlckV2ZW50cyIsImNvbnRvdXIiLCJyaW5nSWQiLCJpbml0aWFsIiwiY2xvbmUiLCJ0aW55cXVldWUiLCJUaW55UXVldWUiLCJkZWZhdWx0XzEiLCJkZWZhdWx0Q29tcGFyZSIsIl9kb3duIiwiX3VwIiwidG9wIiwicGVlayIsImhhbGZMZW5ndGgiLCJiZXN0IiwiZGVmYXVsdCIsInByb2Nlc3NQb2x5Z29uIiwiY29udG91ck9ySG9sZSIsInMxIiwiczIiLCJFTVBUWSIsImJvb2xlYW4iLCJzdWJqZWN0IiwiY2xpcHBpbmciLCJ0cml2aWFsIiwidHJpdmlhbE9wZXJhdGlvbiIsInNiYm94IiwiY2Jib3giLCJldmVudFF1ZXVlIiwicG9seWdvblNldCIsImlpIiwiamoiLCJmaWxsUXVldWUiLCJjb21wYXJlQkJveGVzIiwic3dlZXBMaW5lIiwicmlnaHRib3VuZCIsInByZXZFdmVudCIsInByZXZwcmV2Iiwic3ViZGl2aWRlIiwib3BlcmF0aW9ucyIsIlVOSU9OIiwiRElGRkVSRU5DRSIsIklOVEVSU0VDVElPTiIsIlhPUiIsImRpZmYiLCJ4b3IiLCJyYW5kb21Db2xvciIsInNlZWQiLCJjb2xvckRpY3Rpb25hcnkiLCJkZWZpbmVDb2xvciIsImNvbG9yUmFuZ2VzIiwic3RyaW5nVG9JbnRlZ2VyIiwiSCIsInRvdGFsQ29sb3JzIiwiY29sb3JzIiwiaHN2IiwiZm9ybWF0IiwiSFNWdG9IU0wiLCJoc2wiLCJoc2xDb2xvciIsImFscGhhIiwiSFNWdG9SR0IiLCJyZ2JDb2xvciIsInJnYiIsImNvbXBvbmVudFRvSGV4IiwiSFNWdG9IZXgiLCJzZXRGb3JtYXQiLCJwaWNrSHVlIiwicGlja1NhdHVyYXRpb24iLCJwaWNrQnJpZ2h0bmVzcyIsImh1ZSIsInJhbmRvbVdpdGhpbiIsImh1ZVJhbmdlIiwiY29sb3JIdWUiLCJnZXRDb2xvckluZm8iLCJIZXhUb0hTQiIsImdldFJlYWxIdWVSYW5nZSIsImNvbG9ySW5wdXQiLCJnZXRIdWVSYW5nZSIsImx1bWlub3NpdHkiLCJzYXR1cmF0aW9uUmFuZ2UiLCJnZXRTYXR1cmF0aW9uUmFuZ2UiLCJzTWluIiwiYk1pbiIsImxvd2VyQm91bmRzIiwidjIiLCJnZXRNaW5pbXVtQnJpZ2h0bmVzcyIsImJNYXgiLCJjb2xvck5hbWUiLCJybmQiLCJicmlnaHRuZXNzUmFuZ2UiLCJoIiwiaF9pIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwiY01heCIsImRlbHRhIiwic2F0dXJhdGlvbiIsInNheCIsInBhcnNlciIsInN0cmljdCIsIm9wdCIsIlNBWFBhcnNlciIsIlNBWFN0cmVhbSIsImNyZWF0ZVN0cmVhbSIsIk1BWF9CVUZGRVJfTEVOR1RIIiwiYnVmZmVycyIsImNsZWFyQnVmZmVycyIsImJ1ZmZlckNoZWNrUG9zaXRpb24iLCJsb3dlcmNhc2UiLCJsb3dlcmNhc2V0YWdzIiwibG9vc2VDYXNlIiwidGFncyIsImNsb3NlZCIsImNsb3NlZFJvb3QiLCJzYXdSb290Iiwibm9zY3JpcHQiLCJCRUdJTiIsIkVOVElUSUVTIiwiYXR0cmliTGlzdCIsInhtbG5zIiwibnMiLCJyb290TlMiLCJ0cmFja1Bvc2l0aW9uIiwibGluZSIsImNvbHVtbiIsIkVWRU5UUyIsImNodW5rIiwiT1BFTl9XQUtBIiwic3RhcnRUYWdQb3NpdGlvbiIsIm5vdCIsIndoaXRlc3BhY2UiLCJzdHJpY3RGYWlsIiwidGV4dE5vZGUiLCJURVhUIiwic3RhcnRpIiwic3Vic3RyaW5nIiwiVEVYVF9FTlRJVFkiLCJTQ1JJUFQiLCJTQ1JJUFRfRU5ESU5HIiwic2NyaXB0IiwiQ0xPU0VfVEFHIiwiU0dNTF9ERUNMIiwic2dtbERlY2wiLCJuYW1lU3RhcnQiLCJPUEVOX1RBRyIsInRhZ05hbWUiLCJQUk9DX0lOU1QiLCJwcm9jSW5zdE5hbWUiLCJwcm9jSW5zdEJvZHkiLCJwYWQiLCJ0b1VwcGVyQ2FzZSIsImVtaXROb2RlIiwiQ0RBVEEiLCJjZGF0YSIsIkNPTU1FTlQiLCJjb21tZW50IiwiRE9DVFlQRSIsImRvY3R5cGUiLCJxdW90ZSIsIlNHTUxfREVDTF9RVU9URUQiLCJET0NUWVBFX0RURCIsIkRPQ1RZUEVfUVVPVEVEIiwiRE9DVFlQRV9EVERfUVVPVEVEIiwiQ09NTUVOVF9FTkRJTkciLCJDT01NRU5UX0VOREVEIiwidGV4dG9wdHMiLCJDREFUQV9FTkRJTkciLCJDREFUQV9FTkRJTkdfMiIsIlBST0NfSU5TVF9FTkRJTkciLCJQUk9DX0lOU1RfQk9EWSIsImJvZHkiLCJuYW1lQm9keSIsIm5ld1RhZyIsIm9wZW5UYWciLCJPUEVOX1RBR19TTEFTSCIsIkFUVFJJQiIsImNsb3NlVGFnIiwiYXR0cmliTmFtZSIsImF0dHJpYlZhbHVlIiwiQVRUUklCX05BTUUiLCJBVFRSSUJfVkFMVUUiLCJhdHRyaWIiLCJBVFRSSUJfTkFNRV9TQVdfV0hJVEUiLCJBVFRSSUJfVkFMVUVfUVVPVEVEIiwiQVRUUklCX1ZBTFVFX1VOUVVPVEVEIiwiQVRUUklCX1ZBTFVFX0VOVElUWV9RIiwiQVRUUklCX1ZBTFVFX0NMT1NFRCIsImF0dHJpYkVuZCIsIkFUVFJJQl9WQUxVRV9FTlRJVFlfVSIsIkNMT1NFX1RBR19TQVdfV0hJVEUiLCJyZXR1cm5TdGF0ZSIsInBhcnNlRW50aXR5IiwiZW50aXR5IiwibWF4QWxsb3dlZCIsIm1heEFjdHVhbCIsImNsb3NlVGV4dCIsImNoZWNrQnVmZmVyTGVuZ3RoIiwicmVzdW1lIiwiU3RyZWFtIiwiZXgiLCJzdHJlYW1XcmFwcyIsImV2IiwiX3BhcnNlciIsInJlYWRhYmxlIiwibWUiLCJvbmVuZCIsIm9uZXJyb3IiLCJfZGVjb2RlciIsIlNEIiwibGV0dGVyIiwiWE1MX05BTUVTUEFDRSIsIlhNTE5TX05BTUVTUEFDRSIsInhtbCIsImNoYXJDbGFzcyIsImNoYXJjbGFzcyIsInN0cmluZ0Zyb21DaGFyQ29kZSIsIlNUQVRFIiwiQ09NTUVOVF9TVEFSVElORyIsIm5vZGVUeXBlIiwidGV4dCIsIm5vcm1hbGl6ZSIsIm1lc3NhZ2UiLCJxbmFtZSIsInF1YWxOYW1lIiwicHJlZml4IiwibG9jYWwiLCJxbiIsInNlbGZDbG9zaW5nIiwidXJpIiwibnYiLCJpc1NlbGZDbG9zaW5nIiwiY2xvc2VUbyIsImVudGl0eUxDIiwibnVtU3RyIiwiaGlnaFN1cnJvZ2F0ZSIsImxvd1N1cnJvZ2F0ZSIsIk1BWF9TSVpFIiwiY29kZVVuaXRzIiwicGlwZSIsImRlc3QiLCJvbmRhdGEiLCJwYXVzZSIsIm9uZHJhaW4iLCJfaXNTdGRpbyIsIm9uY2xvc2UiLCJkaWRPbkVuZCIsImRlc3Ryb3kiLCJTdHJpbmdEZWNvZGVyIiwibmIiLCJlbmMiLCJuZW5jIiwicmV0cmllZCIsIl9ub3JtYWxpemVFbmNvZGluZyIsIm5vcm1hbGl6ZUVuY29kaW5nIiwidXRmMTZUZXh0IiwidXRmMTZFbmQiLCJmaWxsTGFzdCIsInV0ZjhGaWxsTGFzdCIsImJhc2U2NFRleHQiLCJiYXNlNjRFbmQiLCJzaW1wbGVXcml0ZSIsInNpbXBsZUVuZCIsImxhc3ROZWVkIiwibGFzdFRvdGFsIiwibGFzdENoYXIiLCJ1dGY4Q2hlY2tCeXRlIiwiYnl0ZSIsInV0ZjhDaGVja0V4dHJhQnl0ZXMiLCJ1dGY4Q2hlY2tJbmNvbXBsZXRlIiwiY29weVByb3BzIiwiU2FmZUJ1ZmZlciIsIm1pbGxpc2Vjb25kIiwic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIm1zIiwiRXZlcnkiLCJyZWciLCJwYXJzZSIsImRvIiwiaW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwic3RyaXBCT00iLCJidWlsZGVyIiwiZGVmYXVsdHMiLCJlc2NhcGVDREFUQSIsInJlcXVpcmVzQ0RBVEEiLCJ3cmFwQ0RBVEEiLCJoYXNQcm9wIiwiQnVpbGRlciIsIm9wdHMiLCJyZWYiLCJidWlsZE9iamVjdCIsInJvb3RPYmoiLCJhdHRya2V5IiwiY2hhcmtleSIsInJlbmRlciIsInJvb3RFbGVtZW50Iiwicm9vdE5hbWUiLCJfdGhpcyIsImF0dHIiLCJjaGlsZCIsInR4dCIsImVsZSIsInVwIiwiYXR0IiwieG1sZGVjIiwiaGVhZGxlc3MiLCJhbGxvd1N1cnJvZ2F0ZUNoYXJzIiwicmVuZGVyT3B0cyIsImV4cGxpY2l0Q2hhcmtleSIsIm5vcm1hbGl6ZVRhZ3MiLCJleHBsaWNpdEFycmF5IiwiaWdub3JlQXR0cnMiLCJtZXJnZUF0dHJzIiwiZXhwbGljaXRSb290IiwidmFsaWRhdG9yIiwiZXhwbGljaXRDaGlsZHJlbiIsImNoaWxka2V5IiwiY2hhcnNBc0NoaWxkcmVuIiwiaW5jbHVkZVdoaXRlQ2hhcnMiLCJhdHRyTmFtZVByb2Nlc3NvcnMiLCJhdHRyVmFsdWVQcm9jZXNzb3JzIiwidGFnTmFtZVByb2Nlc3NvcnMiLCJ2YWx1ZVByb2Nlc3NvcnMiLCJlbXB0eVRhZyIsInByZXNlcnZlQ2hpbGRyZW5PcmRlciIsImNodW5rU2l6ZSIsImJvbSIsInByb2Nlc3NJdGVtIiwicHJvY2Vzc29ycyIsInRoaW5nIiwiUGFyc2VyIiwic3VwZXJDbGFzcyIsInBhcnNlU3RyaW5nUHJvbWlzZSIsInBhcnNlU3RyaW5nIiwiYXNzaWduT3JQdXNoIiwicHJvY2Vzc0FzeW5jIiwieG1sbnNrZXkiLCJ1bnNoaWZ0IiwiX19zdXBlcl9fIiwiZXh0ZW5kIiwic2F4UGFyc2VyIiwiZXJyb3IxIiwiZXJyVGhyb3duIiwibmV3VmFsdWUiLCJvbnRleHQiLCJzdGFjayIsImVuZGVkIiwicmVzdWx0T2JqZWN0IiwiRVhQTElDSVRfQ0hBUktFWSIsIm9ub3BlbnRhZyIsInByb2Nlc3NlZEtleSIsIm9uY2xvc2V0YWciLCJlbXB0eVN0ciIsIm5vZGVOYW1lIiwib2JqQ2xvbmUiLCJvbGQiLCJ4cGF0aCIsImNoYXJDaGlsZCIsIm9uY2RhdGEiLCJwcmVmaXhNYXRjaCIsImZpcnN0Q2hhckxvd2VyQ2FzZSIsInN0cmlwUHJlZml4IiwicGFyc2VOdW1iZXJzIiwicGFyc2VCb29sZWFucyIsIlZhbGlkYXRpb25FcnJvciIsIkRpc2Nvbm5lY3RlZCIsIlByZWNlZGluZyIsIkZvbGxvd2luZyIsIkNvbnRhaW5zIiwiQ29udGFpbmVkQnkiLCJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwiRWxlbWVudCIsIkF0dHJpYnV0ZSIsIlRleHQiLCJDRGF0YSIsIkVudGl0eVJlZmVyZW5jZSIsIkVudGl0eURlY2xhcmF0aW9uIiwiUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwiQ29tbWVudCIsIkRvY3VtZW50IiwiRG9jVHlwZSIsIkRvY3VtZW50RnJhZ21lbnQiLCJOb3RhdGlvbkRlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJSYXciLCJBdHRyaWJ1dGVEZWNsYXJhdGlvbiIsIkVsZW1lbnREZWNsYXJhdGlvbiIsIkR1bW15IiwiZ2V0VmFsdWUiLCJpc1BsYWluT2JqZWN0Iiwic291cmNlcyIsIk5vbmUiLCJPcGVuVGFnIiwiSW5zaWRlVGFnIiwiQ2xvc2VUYWciLCJOb2RlVHlwZSIsIlhNTEF0dHJpYnV0ZSIsImRlYnVnSW5mbyIsImF0dFZhbHVlIiwiaXNJZCIsInNjaGVtYVR5cGVJbmZvIiwid3JpdGVyIiwiZmlsdGVyT3B0aW9ucyIsImlzRXF1YWxOb2RlIiwibmFtZXNwYWNlVVJJIiwibG9jYWxOYW1lIiwiWE1MQ2hhcmFjdGVyRGF0YSIsIlhNTENEYXRhIiwiWE1MTm9kZSIsInN1YnN0cmluZ0RhdGEiLCJhcHBlbmREYXRhIiwiaW5zZXJ0RGF0YSIsImRlbGV0ZURhdGEiLCJyZXBsYWNlRGF0YSIsIlhNTENvbW1lbnQiLCJYTUxET01FcnJvckhhbmRsZXIiLCJYTUxET01TdHJpbmdMaXN0IiwiWE1MRE9NQ29uZmlndXJhdGlvbiIsImRlZmF1bHRQYXJhbXMiLCJwYXJhbXMiLCJnZXRQYXJhbWV0ZXIiLCJjYW5TZXRQYXJhbWV0ZXIiLCJzZXRQYXJhbWV0ZXIiLCJoYW5kbGVFcnJvciIsIlhNTERPTUltcGxlbWVudGF0aW9uIiwiaGFzRmVhdHVyZSIsImNyZWF0ZURvY3VtZW50VHlwZSIsInF1YWxpZmllZE5hbWUiLCJwdWJsaWNJZCIsInN5c3RlbUlkIiwiY3JlYXRlRG9jdW1lbnQiLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJ0aXRsZSIsImdldEZlYXR1cmUiLCJYTUxEVERBdHRMaXN0IiwiZWxlbWVudE5hbWUiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlVHlwZSIsImRlZmF1bHRWYWx1ZVR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkdGRBdHRUeXBlIiwiZHRkQXR0RGVmYXVsdCIsImR0ZEF0dExpc3QiLCJYTUxEVERFbGVtZW50IiwiZHRkRWxlbWVudFZhbHVlIiwiZHRkRWxlbWVudCIsIlhNTERUREVudGl0eSIsInBlIiwicHViSUQiLCJzeXNJRCIsImR0ZFB1YklEIiwiZHRkU3lzSUQiLCJuRGF0YSIsImR0ZE5EYXRhIiwiZHRkRW50aXR5VmFsdWUiLCJkdGRFbnRpdHkiLCJYTUxEVEROb3RhdGlvbiIsImR0ZE5vdGF0aW9uIiwiWE1MRGVjbGFyYXRpb24iLCJ4bWxWZXJzaW9uIiwieG1sRW5jb2RpbmciLCJ4bWxTdGFuZGFsb25lIiwiZGVjbGFyYXRpb24iLCJYTUxOYW1lZE5vZGVNYXAiLCJYTUxEb2NUeXBlIiwicmVmMSIsInJlZjIiLCJjaGlsZHJlbiIsImRvY3VtZW50T2JqZWN0Iiwibm9kZXMiLCJhdHRMaXN0IiwicEVudGl0eSIsIm5vdGF0aW9uIiwiZG9jVHlwZSIsImVudCIsInBlbnQiLCJYTUxTdHJpbmdXcml0ZXIiLCJYTUxTdHJpbmdpZmllciIsIlhNTERvY3VtZW50IiwiZG9jdW1lbnRVUkkiLCJkb21Db25maWciLCJyb290T2JqZWN0Iiwid3JpdGVyT3B0aW9ucyIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjcmVhdGVDb21tZW50IiwiY3JlYXRlQ0RBVEFTZWN0aW9uIiwiY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwiY3JlYXRlQXR0cmlidXRlIiwiY3JlYXRlRW50aXR5UmVmZXJlbmNlIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWduYW1lIiwiaW1wb3J0Tm9kZSIsImltcG9ydGVkTm9kZSIsImRlZXAiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdGVBdHRyaWJ1dGVOUyIsImdldEVsZW1lbnRzQnlUYWdOYW1lTlMiLCJnZXRFbGVtZW50QnlJZCIsImVsZW1lbnRJZCIsImFkb3B0Tm9kZSIsIm5vcm1hbGl6ZURvY3VtZW50IiwicmVuYW1lTm9kZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJjbGFzc05hbWVzIiwiY3JlYXRlRXZlbnQiLCJldmVudEludGVyZmFjZSIsImNyZWF0ZVJhbmdlIiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwid2hhdFRvU2hvdyIsImNyZWF0ZVRyZWVXYWxrZXIiLCJXcml0ZXJTdGF0ZSIsIlhNTEVsZW1lbnQiLCJYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLCJYTUxSYXciLCJYTUxUZXh0IiwiWE1MRG9jdW1lbnRDQiIsIm9uRGF0YSIsIm9uRW5kIiwib25EYXRhQ2FsbGJhY2siLCJvbkVuZENhbGxiYWNrIiwiY3VycmVudE5vZGUiLCJjdXJyZW50TGV2ZWwiLCJvcGVuVGFncyIsImRvY3VtZW50U3RhcnRlZCIsImRvY3VtZW50Q29tcGxldGVkIiwiY3JlYXRlQ2hpbGROb2RlIiwiYXR0TmFtZSIsImF0dHJpYnMiLCJkdW1teSIsImluc3RydWN0aW9uIiwib3BlbkN1cnJlbnQiLCJvbGRWYWxpZGF0aW9uRmxhZyIsIm5vVmFsaWRhdGlvbiIsImtlZXBOdWxsQXR0cmlidXRlcyIsImluc1RhcmdldCIsImluc1ZhbHVlIiwicHJvY2Vzc2luZ0luc3RydWN0aW9uIiwicm9vdE5vZGVOYW1lIiwiY2xvc2VOb2RlIiwib3Blbk5vZGUiLCJpc09wZW4iLCJpbmRlbnQiLCJlbmRsaW5lIiwiaXNDbG9zZWQiLCJsZXZlbCIsIm5vZCIsImRhdCIsImNvbSIsImlucyIsImRlYyIsImR0ZCIsIlhNTER1bW15IiwiaXNSb290IiwiYXR0cmlidXRlTWFwIiwiY2xvbmVkU2VsZiIsImNsb25lZENoaWxkIiwicmVtb3ZlQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlTm9kZSIsInNldEF0dHJpYnV0ZU5vZGUiLCJuZXdBdHRyIiwicmVtb3ZlQXR0cmlidXRlTm9kZSIsIm9sZEF0dHIiLCJnZXRBdHRyaWJ1dGVOUyIsInNldEF0dHJpYnV0ZU5TIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJnZXRBdHRyaWJ1dGVOb2RlTlMiLCJzZXRBdHRyaWJ1dGVOb2RlTlMiLCJoYXNBdHRyaWJ1dGUiLCJoYXNBdHRyaWJ1dGVOUyIsInNldElkQXR0cmlidXRlIiwic2V0SWRBdHRyaWJ1dGVOUyIsInNldElkQXR0cmlidXRlTm9kZSIsImlkQXR0ciIsImdldE5hbWVkSXRlbSIsInNldE5hbWVkSXRlbSIsIm9sZE5vZGUiLCJyZW1vdmVOYW1lZEl0ZW0iLCJnZXROYW1lZEl0ZW1OUyIsInNldE5hbWVkSXRlbU5TIiwicmVtb3ZlTmFtZWRJdGVtTlMiLCJEb2N1bWVudFBvc2l0aW9uIiwiWE1MTm9kZUxpc3QiLCJwYXJlbnQxIiwiYmFzZVVSSSIsImNoaWxkTm9kZUxpc3QiLCJ0ZXh0Q29udGVudCIsInNldFBhcmVudCIsImNoaWxkTm9kZSIsImxhc3RDaGlsZCIsImxlbjEiLCJyZWYzIiwiaWdub3JlRGVjb3JhdG9ycyIsImNvbnZlcnRBdHRLZXkiLCJzZXBhcmF0ZUFycmF5SXRlbXMiLCJrZWVwTnVsbE5vZGVzIiwiY29udmVydFRleHRLZXkiLCJjb252ZXJ0Q0RhdGFLZXkiLCJjb252ZXJ0Q29tbWVudEtleSIsImNvbnZlcnRSYXdLZXkiLCJjb252ZXJ0UElLZXkiLCJpbnNlcnRCZWZvcmUiLCJuZXdDaGlsZCIsInJlZkNoaWxkIiwicmVtb3ZlZCIsImluc2VydEFmdGVyIiwiY29tbWVudEJlZm9yZSIsImNvbW1lbnRBZnRlciIsImluc3RydWN0aW9uQmVmb3JlIiwiaW5zdHJ1Y3Rpb25BZnRlciIsImRvYyIsImltcG9ydERvY3VtZW50IiwiY2xvbmVkUm9vdCIsImltcG9ydFhNTEJ1aWxkZXIiLCJyZXBsYWNlQ2hpbGQiLCJvbGRDaGlsZCIsImhhc0NoaWxkTm9kZXMiLCJjbG9uZU5vZGUiLCJpc1N1cHBvcnRlZCIsImhhc0F0dHJpYnV0ZXMiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsIm90aGVyIiwiaXNBbmNlc3RvciIsImlzRGVzY2VuZGFudCIsImlzUHJlY2VkaW5nIiwiaXNTYW1lTm9kZSIsImxvb2t1cFByZWZpeCIsImlzRGVmYXVsdE5hbWVzcGFjZSIsImxvb2t1cE5hbWVzcGFjZVVSSSIsInNldFVzZXJEYXRhIiwiZ2V0VXNlckRhdGEiLCJub2RlUG9zIiwidGhpc1BvcyIsInRyZWVQb3NpdGlvbiIsImlzRm9sbG93aW5nIiwiZm9yZWFjaFRyZWVOb2RlIiwiZnVuYyIsIlhNTFdyaXRlckJhc2UiLCJYTUxTdHJlYW1Xcml0ZXIiLCJzdHJlYW0iLCJpc0xhc3RSb290Tm9kZSIsIndyaXRlQ2hpbGROb2RlIiwic3BhY2VCZWZvcmVTbGFzaCIsImNoaWxkTm9kZUNvdW50IiwiZmlyc3RDaGlsZE5vZGUiLCJhbGxvd0VtcHR5IiwicHJldHR5Iiwic3VwcHJlc3NQcmV0dHlDb3VudCIsIm5ld2xpbmUiLCJhc3NlcnRMZWdhbE5hbWUiLCJhc3NlcnRMZWdhbENoYXIiLCJ0ZXh0RXNjYXBlIiwiYXR0RXNjYXBlIiwicmVnZXgiLCJhbXByZWdleCIsIm5vRG91YmxlRW5jb2RpbmciLCJwcmV2aW91c1NpYmxpbmciLCJuZXh0U2libGluZyIsInNwbGl0VGV4dCIsInJlcGxhY2VXaG9sZVRleHQiLCJjb250ZW50IiwiZmlsdGVyZWRPcHRpb25zIiwicmVmNCIsInJlZjUiLCJyZWY2IiwiZG9udFByZXR0eVRleHROb2RlcyIsImRvbnRwcmV0dHl0ZXh0bm9kZXMiLCJzcGFjZWJlZm9yZXNsYXNoIiwidXNlciIsImluZGVudExldmVsIiwib3BlbkF0dHJpYnV0ZSIsImNsb3NlQXR0cmlidXRlIiwicHJldHR5U3VwcHJlc3NlZCIsInN0cmluZ1dyaXRlciIsInN0cmVhbVdyaXRlciIsImltcGxlbWVudGF0aW9uIiwid3JpdGVyU3RhdGUiLCJTRUNfVE9fUkFEIiwiSEFMRl9QSSIsIkVQU0xOIiwiRDJSIiwiUjJEIiwiRk9SVFBJIiwiVFdPX1BJIiwiU1BJIiwiZnQiLCJ0b19tZXRlciIsImlnbm9yZWRDaGFyIiwidGVzdGtleSIsImxrZXkiLCJkZWZEYXRhIiwicGFyYW1OYW1lIiwicGFyYW1WYWwiLCJwYXJhbU91dG5hbWUiLCJwYXJhbU9iaiIsInByb2oiLCJkYXR1bSIsInJmIiwibGF0XzAiLCJsYXQwIiwibGF0XzEiLCJsYXQxIiwibGF0XzIiLCJsYXQyIiwibGF0X3RzIiwibG9uXzAiLCJsb25nMCIsImxvbl8xIiwibG9uZzEiLCJsb25fMiIsImxvbmcyIiwibG9uYyIsImxvbmdjIiwieF8wIiwieV8wIiwia18wIiwiazAiLCJyX2EiLCJSX0EiLCJ6b25lIiwic291dGgiLCJ1dG1Tb3V0aCIsInRvd2dzODQiLCJkYXR1bV9wYXJhbXMiLCJ1bml0IiwiZnJvbV9ncmVlbndpY2giLCJwbSIsIm5hZGdyaWRzIiwiZGF0dW1Db2RlIiwiYXhpcyIsImxlZ2FsQXhpcyIsImxhdGluIiwia2V5d29yZCIsImVuZFRoaW5ncyIsImRpZ2V0cyIsInBsYWNlIiwiY3VycmVudE9iamVjdCIsIm1hcGl0IiwibmV3T2JqIiwic0V4cHIiLCJzaGlmdCIsImNvbnZlcnQiLCJkMnIiLCJ3a3QiLCJsaXNwIiwicHJvak5hbWUiLCJQUk9KRUNUSU9OIiwiQVhJUyIsImF4aXNPcmRlciIsIlVOSVQiLCJEQVRVTSIsIlNQSEVST0lEIiwiZ2VvZ2NzIiwiR0VPR0NTIiwidG9NZXRlciIsInNwaGVyZSIsImVsbHBzIiwiVE9XR1M4NCIsIm91dE5hbWUiLCJpbk5hbWUiLCJyZW5hbWUiLCJjbGVhbldLVCIsImRlZnMiLCJFUFNHIiwiRVNSSSIsIklBVTIwMDAiLCJyZWFkQ2hhcmljdGVyIiwiY2hhciIsIm5ldXRyYWwiLCJxdW90ZWQiLCJhZnRlcnF1b3RlIiwid29yZCIsImFmdGVySXRlbSIsIm5ld09iamVjdHMiLCJXR1M4NCIsIkdPT0dMRSIsImNvZGVXb3JkcyIsImNvZGVzIiwiZGVzdGluYXRpb24iLCJwcm9wZXJ0eSIsImVjY2VudCIsInNpbnBoaSIsImNvc3BoaSIsImNvbiIsInBoaSIsInRhbiIsInRzIiwiZHBoaSIsImVjY250aCIsImF0YW4iLCJpZGVudGl0eSIsInB0IiwicHJvanMiLCJlcyIsImNvcyIsIm1zZm56IiwiZm9yd2FyZCIsImxvbiIsImxhdCIsImFkanVzdF9sb24iLCJ0c2ZueiIsImludmVyc2UiLCJwaGkyeiIsInByb2pTdG9yZSIsImVsbGlwc2VOYW1lIiwiZWxsaXBzZSIsImRhdHVtTmFtZSIsIlByb2plY3Rpb24iLCJzcnNDb2RlIiwianNvbiIsInRlc3RPYmoiLCJ0ZXN0RGVmIiwidGVzdFdLVCIsImF1dGgiLCJjaGVja01lcmNhdG9yIiwibWF5YmVQcm9qU3RyIiwiY2hlY2tQcm9qU3RyIiwidGVzdFByb2oiLCJwYXJzZUNvZGUiLCJvdXJQcm9qIiwicHJvamVjdGlvbnMiLCJkYXR1bURlZiIsInNwaGVyZV8iLCJlY2MiLCJlcDIiLCJkYXR1bU9iaiIsImRhdHVtX3R5cGUiLCJnZW9kZXRpY1RvR2VvY2VudHJpYyIsIlJuIiwiU2luX0xhdCIsIlNpbjJfTGF0IiwiQ29zX0xhdCIsIkxvbmdpdHVkZSIsIkxhdGl0dWRlIiwiSGVpZ2h0IiwiZ2VvY2VudHJpY1RvR2VvZGV0aWMiLCJSUiIsIkNUIiwiU1QiLCJSWCIsIlJLIiwiUk4iLCJDUEhJMCIsIlNQSEkwIiwiQ1BISSIsIlNQSEkiLCJTRFBISSIsIlgiLCJZIiwiWiIsImF0YW4yIiwiY2hlY2tQYXJhbXMiLCJjcnMiLCJkZW5vcm0iLCJ4aW4iLCJ5aW4iLCJ6aW4iLCJjaGVja0Nvb3JkIiwidHJhbnNmb3JtIiwid2dzODQiLCJjaGVja1Nhbml0eSIsImNoZWNrTm90V0dTIiwiYWRqdXN0X2F4aXMiLCJjb21wYXJlRGF0dW1zIiwiRHhfQkYiLCJEeV9CRiIsIkR6X0JGIiwiUnhfQkYiLCJSeV9CRiIsIlJ6X0JGIiwiTV9CRiIsImdlb2NlbnRyaWNUb1dnczg0IiwieF90bXAiLCJ5X3RtcCIsInpfdG1wIiwiZ2VvY2VudHJpY0Zyb21XZ3M4NCIsImRhdHVtX3RyYW5zZm9ybSIsInRyYW5zZm9ybWVyIiwidHJhbnNmb3JtZWRBcnJheSIsImNoZWNrUHJvaiIsIm9Qcm9qIiwiZnJvbVByb2oiLCJ0b1Byb2oiLCJzaW5nbGUiLCJTRVRfT1JJR0lOX0NPTFVNTl9MRVRURVJTIiwiU0VUX09SSUdJTl9ST1dfTEVUVEVSUyIsIkkiLCJtZ3JzIiwiVVRNdG9MTCIsImRlY29kZSIsImJvdHRvbSIsImxsIiwiYWNjdXJhY3kiLCJ1dG0iLCJyb3ciLCJjb2xPcmlnaW4iLCJyb3dPcmlnaW4iLCJjb2xJbnQiLCJyb3dJbnQiLCJyb2xsb3ZlciIsImVhc3RpbmciLCJub3J0aGluZyIsInNldFBhcm0iLCJzZWFzdGluZyIsInNub3J0aGluZyIsInpvbmVOdW1iZXIiLCJ6b25lTGV0dGVyIiwiZ2V0MTAwa1NldEZvclpvbmUiLCJlbmNvZGUiLCJlY2NQcmltZVNxdWFyZWQiLCJOIiwiTG9uZ09yaWdpblJhZCIsIlpvbmVOdW1iZXIiLCJMYXQiLCJMb25nIiwiZWNjU3F1YXJlZCIsIkxhdFJhZCIsImRlZ1RvUmFkIiwiTG9uZ1JhZCIsIkxldHRlckRlc2lnbmF0b3IiLCJVVE1FYXN0aW5nIiwiVVRNTm9ydGhpbmciLCJMTHRvVVRNIiwiZGVnIiwicmFkVG9EZWciLCJOMSIsIlQxIiwiQzEiLCJSMSIsIkxvbmdPcmlnaW4iLCJtdSIsInBoaTFSYWQiLCJ0b3BSaWdodCIsIm1ncnNTdHJpbmciLCJ0ZXN0Q2hhciIsImh1bksiLCJlYXN0MTAwayIsImN1ckNvbCIsImVhc3RpbmdWYWx1ZSIsInJld2luZE1hcmtlciIsImdldEVhc3RpbmdGcm9tQ2hhciIsIm5vcnRoMTAwayIsImN1clJvdyIsIm5vcnRoaW5nVmFsdWUiLCJnZXROb3J0aGluZ0Zyb21DaGFyIiwiZ2V0TWluTm9ydGhpbmciLCJyZW1haW5kZXIiLCJhY2N1cmFjeUJvbnVzIiwic2VwRWFzdGluZ1N0cmluZyIsInNlcE5vcnRoaW5nU3RyaW5nIiwic2VwIiwic2VwRWFzdGluZyIsInNlcE5vcnRoaW5nIiwiUG9pbnQiLCJmcm9tTUdSUyIsIm1ncnNTdHIiLCJ0b01HUlMiLCJDMDQiLCJDMDYiLCJDMDgiLCJlbiIsInNwaGkiLCJjcGhpIiwicGpfbWxmbiIsInBqX2VuZm4iLCJtbDAiLCJkZWx0YV9sb24iLCJzaW5fcGhpIiwiY29zX3BoaSIsImFsIiwiYWxzIiwiY3MiLCJ0cSIsIm1sIiwiYWNvcyIsInBqX2ludl9tbGZuIiwidGFuX3BoaSIsImRzIiwidGVtcCIsImFzaW4iLCJwcCIsImNvc18yQiIsImgxIiwiaDIiLCJhcmdfciIsImFyZ19pIiwiaHIyIiwiaGkyIiwic2luX2FyZ19yIiwiY29zX2FyZ19yIiwic2luaF9hcmdfaSIsImNvc2hfYXJnX2kiLCJociIsImhpMSIsImhyMSIsImNnYiIsImNiZyIsInV0ZyIsImd0dSIsIm5wIiwiUW4iLCJnYXRnIiwiWmIiLCJjbGVucyIsIkNlIiwiQ24iLCJzaW5fQ24iLCJjb3NfQ24iLCJzaW5fQ2UiLCJjb3NfQ2UiLCJsb2cxcHkiLCJhc2luaHkiLCJjbGVuc19jbXBseCIsImFkanVzdF96b25lIiwiZXRtZXJjIiwiZGVwZW5kc09uIiwiZXNpbnAiLCJyYyIsInBoaWMwIiwicmF0ZXhwIiwic3JhdCIsImdhdXNzIiwic2luYzAiLCJjb3NjMCIsIlIyIiwic2luYyIsImNvc2MiLCJjb3NsIiwicmhvIiwiY29zbGF0MCIsInNpbmxhdDAiLCJjb25zIiwibXMxIiwiWDAiLCJzc2ZuXyIsImNvc1gwIiwic2luWDAiLCJzaW5YIiwiY29zWCIsInJoIiwic2lubGF0IiwiY29zbGF0IiwiZGxvbiIsImNlIiwiQ2hpIiwicGhpdCIsImVjY2VuIiwicGh5MCIsImxhbWJkYTAiLCJzaW5QaHkwIiwic2VtaU1ham9yQXhpcyIsImZsYXR0ZW5pbmciLCJiMCIsImsxIiwiazIiLCJrMyIsIlNhMSIsIlNhMiIsInJvdEkiLCJyb3RCIiwibGFtYmRhIiwicGh5IiwicHJldlBoeSIsIml0ZXJhdGlvbiIsIm5vX29mZiIsIm5vX3JvdCIsImJsIiwiZmwiLCJnbCIsInQwIiwiZGwiLCJ0MSIsInQyIiwiaGwiLCJqbCIsInBsIiwiZGxvbjEyIiwiZGxvbjEwIiwiZ2FtbWEwIiwidWMiLCJ1cyIsInZzIiwicWwiLCJzbCIsInRsIiwidmwiLCJ1bCIsIlBPU0lUSVZFX0lORklOSVRZIiwicXAiLCJzcCIsInRwIiwidnAiLCJzaW4xIiwiY29zMSIsInRzMSIsInNpbjIiLCJjb3MyIiwibXMyIiwidHMyIiwidHMwIiwiZjAiLCJyaDEiLCJ0aGV0YSIsInM0NSIsInM5MCIsImZpMCIsImFsZmEiLCJ1cSIsIm4wIiwiczAiLCJybzAiLCJhZCIsImdmaSIsImRlbHRhdiIsImVwcyIsInJvIiwiY3plY2giLCJmaTEiLCJlMCIsImUzIiwiZTBmbiIsImUxZm4iLCJlMmZuIiwiZTNmbiIsIm1sZm4iLCJsYW0iLCJubCIsImdOIiwiYXNxIiwiY2wiLCJkZCIsInBoaTEiLCJpbWxmbiIsIm5sMSIsInJsMSIsInRsMSIsImRzcSIsImFkanVzdF9sYXQiLCJTX1BPTEUiLCJOX1BPTEUiLCJFUVVJVCIsIk9CTElRIiwicXNmbnoiLCJtbWYiLCJhcGEiLCJBUEEiLCJhdXRoc2V0IiwicnEiLCJ4bWYiLCJ5bWYiLCJzaW5iMSIsImNvc2IxIiwic2lucGgwIiwiY29zcGgwIiwiY29zbGFtIiwic2lubGFtIiwic2luYiIsImNvc2IiLCJjQ2UiLCJzQ2UiLCJhYiIsImJldGEiLCJjb3N6Iiwic2lueiIsInNpbl9wbyIsImNvc19wbyIsInFzMSIsInFzMiIsInQzIiwicXMwIiwibnMwIiwicXMiLCJwaGkxeiIsImFzaW56IiwiZWNjbnRzIiwic2luX3AxNCIsImNvc19wMTQiLCJpbmZpbml0eV9kaXN0IiwiY29zbG9uIiwiaXFzZm56IiwiZGxhdCIsInRhbnBoaSIsIm1sbiIsIm1sbnAiLCJtYSIsIkJfcmUiLCJCX2ltIiwiQ19yZSIsIkNfaW0iLCJkZWx0YV9sYXQiLCJkX3BoaSIsImRfbGFtYmRhIiwiZF9waGlfbiIsImRfcHNpIiwidGhfbl9pbTEiLCJ0aF9yZSIsInRoX2ltIiwidGhfbl9yZSIsInRoX25faW0iLCJ6X3JlIiwiel9pbSIsInpfbl9pbTEiLCJkZWx0YV94Iiwiel9uX3JlIiwiel9uX2ltIiwiaXRlcmF0aW9ucyIsIm51bV9yZSIsIm51bV9pbSIsImRlbl9yZSIsImRlbl9pbSIsImRlbjIiLCJkX3BzaV9uIiwiQ195IiwiQ194IiwiZGVsdGFfdGhldGEiLCJtbDEiLCJtbDIiLCJzaW50aCIsImNvc3RoIiwiZ3NxIiwibXNxIiwieHgiLCJ5eSIsInh5cyIsImMxIiwiYzMiLCJtMSIsInRoMSIsInNpbl9wMTIiLCJjb3NfcDEyIiwiTWxwIiwiTWwiLCJObDEiLCJObCIsInBzaSIsIkF6IiwiR0giLCJIcyIsImtwIiwiY29zX2MiLCJzMyIsInM0IiwiY29zQXoiLCJFZSIsInNpbnBzaSIsInFzY19md2RfZXF1YXRfZmFjZV90aGV0YSIsInFzY19zaGlmdF9sb25fb3JpZ2luIiwic2xvbiIsImZhY2UiLCJvbmVfbWludXNfZiIsIm9uZV9taW51c19mX3NxdWFyZWQiLCJ4eSIsInNpbmxvbiIsIm51IiwiY29zbXUiLCJ0YW5udSIsInRhbnRoZXRhIiwiaW52ZXJ0X3NpZ24iLCJ4YSIsImxwIiwiQ09FRlNfWCIsIkNPRUZTX1kiLCJGWEMiLCJGWUMiLCJwb2x5M192YWwiLCJjb2VmcyIsIk5PREVTIiwiZl9kZiIsIm1heF9lcnIiLCJpdGVycyIsInVwZCIsIm5ld3Rvbl9yYXBzaG9uIiwicG9seTNfZGVyIiwiYXppIiwidGlsdCIsInBuMSIsInJwIiwicGZhY3QiLCJvbWVnYSIsImdhbW1hIiwiY2ciLCJzZyIsImN3Iiwic3ciLCJ5dCIsImJhIiwiYm0iLCJicSIsInByb2o0IiwiUHJvaiIsInRtZXJjIiwic3RlcmVhIiwic3RlcmUiLCJzb21lcmMiLCJvbWVyYyIsImxjYyIsImtyb3ZhayIsImNhc3MiLCJsYWVhIiwiYWVhIiwiZ25vbSIsImNlYSIsImVxYyIsInBvbHkiLCJuem1nIiwibWlsbCIsInNpbnUiLCJtb2xsIiwiZXFkYyIsInZhbmRnIiwiYWVxZCIsIm9ydGhvIiwicXNjIiwicm9iaW4iLCJnZW9jZW50IiwidHBlcnMiLCJQcm9qNERlZnMiLCJhc3FyIiwiYnNxciIsImNyZWF0ZUVsbGlwc29pZCIsImdldFByb3AiLCJwcm9wcyIsInByb3AiLCJleGlzdHMiLCJwYXJzZVNlcXVlbmNlIiwiZ2V0Q29sb3IiLCJ0b1JhZGlhbnMiLCJhbmdsZUluRGVncmVlcyIsInRvRGVncmVlcyIsImFuZ2xlSW5SYWRpYW5zIiwibG9uMSIsImRCeVIiLCJvcmlnaW4iLCJkaXN0YW5jZUluTWV0ZXJzIiwicmFkaXVzIiwibGFtYmRhMSIsIkRlbHRhUGhpIiwicGhpMiIsIkRlbHRhUHNpIiwiY2FsY3VsYXRlUmh1bWJEZXN0aW5hdGlvbiIsImRpcmVjdGlvbiIsInpUcmFuc2xhdGlvbiIsIm11dGF0ZSIsInBvaW50Q29vcmRzIiwibmV3Q29vcmRzIiwiUFJPSkVDVElPTl9BVVRPX0RFVEVDVCIsIkNPTlZFUlRfU1VSRkFDRVMiLCJDT05WRVJUX1BBUkNFTFMiLCJDT05WRVJUX1BJUEVfTkVUV09SS1MiLCJDT05WRVJUX0NHX1BPSU5UUyIsImNvbnZlcnRlcnMiLCJ4bWxPYmoiLCJwcm9qZWN0aW9uIiwib3JpZ2luYWxQb2ludHMiLCJvcmlnaW5hbFBhcmNlbHMiLCIkIiwicGMiLCJvcGMiLCJDb29yZEdlb20iLCJlbmRDb29yZCIsIm9yaWdDb29yZHMiLCJMaW5lIiwib2MiLCJTdGFydCIsInBudFJlZiIsIkVuZCIsInBhcmFtZXRlcnMiLCJsYW5keG1sQ2xhc3MiLCJjbGFzcyIsImxhbmR4bWxTdGF0ZSIsImxhbmR4bWxQYXJjZWxUeXBlIiwicGFyY2VsVHlwZSIsImxhbmR4bWxUeXBlIiwibGFuZHhtbENvbG9yIiwiY29sb3JPcHRzIiwic3VyZmFjZXNDb250YWluZXJOb2RlcyIsInNjIiwiYXR0cnMiLCJiYXNlUHJvcHMiLCJzdXJmYWNlTm9kZXMiLCJmZWF0dXJlUHJvcHMiLCJkZXNjcmlwdGlvbiIsInN1cmZhY2VGZWF0dXJlcyIsInN1cmZhY2UiLCJib3VuZGFyeU5vZGVzIiwiYm91bmRhcnkiLCJzZXEiLCJjb252ZXJ0Qm91bmRhcmllcyIsInBvaW50Tm9kZXMiLCJmYWNlTm9kZXMiLCJwb2ludElkIiwiZmFjZXMiLCJwb2ludElkcyIsImNvbnZlcnRGYWNlcyIsIm1lcmdlZCIsInBpcGVOZXR3b3Jrc05vZGVzIiwicG4iLCJwaXBlTmV0d29ya05vZGVzIiwic3RydWN0cyIsImxvY2FsU3RydWN0cyIsInBpcGVOZXR3b3JrIiwic3RydWN0Tm9kZXMiLCJjZW50ZXJOb2RlIiwicmVjdFN0cnVjdE5vZGUiLCJjaXJjU3RydWN0Tm9kZSIsImlubGV0U3RydWN0Tm9kZSIsIm91dGxldFN0cnVjdE5vZGUiLCJjb25uZWN0aW9uTm9kZSIsInN0cnVjdFR5cGUiLCJsYW5keG1sU3RydWN0IiwibGFuZHhtbEVsZXZSaW0iLCJlbGV2UmltIiwibGFuZHhtbEVsZXZTdW1wIiwiZWxldlN1bXAiLCJsYW5keG1sRGlhbWV0ZXIiLCJkaWFtZXRlciIsImxhbmR4bWxUaGlja25lc3MiLCJ0aGlja25lc3MiLCJsYW5keG1sTGVuZ3RoIiwibGFuZHhtbFdpZHRoIiwid2lkdGgiLCJjZW50ZXIiLCJsYW5keG1sQ2VudGVyTG9uZ2l0dWRlIiwibGFuZHhtbENlbnRlckxhdGl0dWRlIiwibGFuZHhtbENlbnRlckFsdGl0dWRlIiwiY2VudGVyQ29vcmRzIiwibm9ydGhFYXN0Iiwibm9ydGhXZXN0Iiwic291dGhXZXN0Iiwic291dGhFYXN0Iiwic3F1YXJlQXJvdW5kIiwibnVtYmVyT2ZTZWdtZW50cyIsImZsYXRDb29yZGluYXRlcyIsImNpcmNsZVRvUG9seWdvbiIsImNvbnZlcnRTdHJ1Y3RzIiwicGlwZXMiLCJwaXBlTm9kZXMiLCJjaXJjUGlwZU5vZGUiLCJsYW5keG1sTWF0ZXJpYWwiLCJtYXRlcmlhbCIsInJlZlN0YXJ0IiwicmVmRW5kIiwiY29udmVydFBpcGVzIiwicG9pbnRzQ29udGFpbmVyTm9kZXMiLCJwb2ludEZlYXR1cmUiLCJjZ1BvaW50IiwibGFuZHhtbEFsdGl0dWRlIiwiY29udmVydFBvaW50IiwiQ29udmVydGVyIiwiZGVmYXVsdE9wdGlvbnMiLCJlbmFibGVkQ29udmVydGVycyIsInByb2o0RGVmcyIsImZlYXR1cmVNYXBwZXIiLCJwYXJzZXJPcHRpb25zIiwiY29uZmlndXJlUHJvajQiLCJjb252ZXJ0VG9HZW9KU09OIiwiZ2V0TGFuZFhNTFByb2plY3Rpb24iLCJuZXdGZWF0dXJlcyIsImFkZGl0aW9uYWxQcm9qNERlZnMiLCJtYW51YWxQcm9qZWN0aW9uIiwiZmluZFVUTVByb2plY3Rpb24iLCJ1dG1Qcm9qZWN0aW9uIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIl9fZXNNb2R1bGUiLCJkZWZpbml0aW9uIiwiZ2xvYmFsVGhpcyIsIm5tZCIsInBhdGhzIl0sIm1hcHBpbmdzIjoiO0NBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxHQUFJSCxHQUNlLGlCQUFaQyxRQUNkQSxRQUFpQixRQUFJRCxJQUVyQkQsRUFBYyxRQUFJQyxJQVJwQixDQVNHSyxNQUFNLFdBQ1QsTSx5Q0NSQSxJQUFJQyxFQUFTLEVBQVEsTUFFakJDLEVBQVMsUUFnRGIsU0FBU0MsRUFBWUMsR0FDakIsSUFBSUMsRUFBUSxFQUNaLEdBQUlELEdBQVVBLEVBQU9FLE9BQVMsRUFBRyxDQUM3QkQsR0FBU0UsS0FBS0MsSUFBSUMsRUFBU0wsRUFBTyxLQUNsQyxJQUFLLElBQUlNLEVBQUksRUFBR0EsRUFBSU4sRUFBT0UsT0FBUUksSUFDL0JMLEdB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QjJqQixZQUFhbnpDLEVBQUtkLEVBQU9pMEMsZ0IsZUNsQjNCLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsSUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxJQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFB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SUFDVCxPQUFXLElBQ1gsT0FBVyxJQUNYLE1BQVUsSUFDVixPQUFXLElBQ1gsSUFBUSxJQUNSLEtBQVMsSUFDVCxPQUFXLElBQ1gsTUFBVSxJQUNWLE9BQVcsSUFDWCxLQUFTLElBQ1QsT0FBVyxJQUNYLE9BQVcsSUFDWCxNQUFVLElBQ1YsT0FBVyxJQUNYLE9BQVcsSUFDWCxPQUFXLElBQ1gsS0FBUyxJQUNULE1BQVUsSUFDVixNQUFVLElBQ1YsT0FBVyxJQUNYLE1BQVUsSUFDVixPQUFXLElBQ1gsS0FBUyxJQUNULE9BQVcsSUFDWCxLQUFTLElBQ1QsS0FBUyxJQUNULElBQVEsSUFDUixLQUFTLElBQ1QsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsT0FBVyxJQUNYLElBQVEsSUFDUixPQUFXLElBQ1gsS0FBUyxJQUNULElBQVEsSUFDUixLQUFTLElBQ1QsTUFBVSxJQUNWLElBQVEsSUFDUixJQUFRLElBQ1IsS0FBUyxJQUNULElBQVEsSUFDUixPQUFXLElBQ1gsS0FBUyxJQUNULEtBQVMsSUFDVCxLQUFTLElBQ1QsTUFBVSxJQUNWLE1BQVUsSUFDVixLQUFTLElBQ1QsT0FBVyxJQUNYLE1BQVUsSUFDVixLQUFTLElBQ1QsTUFBVSxJQUNWLE9BQVcsSUFDWCxPQUFXLElBQ1gsT0FBVyxJQUNYLE9BQVcsSUFDWCxNQUFVLElBQ1YsT0FBVyxJQUNYLE1BQVUsSUFDVixNQUFVLElBQ1YsT0FBVyxJQUNYLE9BQVcsSUFDWCxLQUFTLElBQ1QsS0FBUyxJQUNULEtBQVMsSUFDVCxNQUFVLElBQ1YsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsTUFBVSxJQUNWLFFBQVksSUFDWixLQUFTLElBQ1QsSUFBUSxJQUNSLE1BQVUsSUFDVixLQUFTLElBQ1QsTUFBVSxJQUNWLE9BQVcsSUFDWCxHQUFPLElBQ1AsR0FBTyxJQUNQLEdBQU8sSUFDUCxRQUFZLElBQ1osR0FBTyxJQUNQLElBQVEsSUFDUixNQUFVLElBQ1YsSUFBUSxJQUNSLFFBQVksSUFDWixJQUFRLElBQ1IsSUFBUSxJQUNSLElBQVEsSUFDUixNQUFVLElBQ1YsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsTUFBVSxJQUNWLFFBQVksSUFDWixLQUFTLElBQ1QsSUFBUSxJQUNSLE1BQVUsSUFDVixLQUFTLElBQ1QsTUFBVSxJQUNWLE9BQVcsSUFDWCxHQUFPLElBQ1AsR0FBTyxJQUNQLEdBQU8sSUFDUCxRQUFZLElBQ1osR0FBTyxJQUNQLElBQVEsSUFDUixPQUFXLElBQ1gsTUFBVSxJQUNWLElBQVEsSUFDUixRQUFZLElBQ1osSUFBUSxJQUNSLElBQVEsSUFDUixJQUFRLElBQ1IsTUFBVSxJQUNWLFNBQWEsSUFDYixNQUFVLElBQ1YsSUFBUSxJQUNSLEtBQVMsS0FDVCxLQUFTLEtBQ1QsT0FBVyxLQUNYLEtBQVMsS0FDVCxJQUFRLEtBQ1IsSUFBUSxLQUNSLElBQVEsS0FDUixNQUFVLEtBQ1YsTUFBVSxLQUNWLE1BQVUsS0FDVixNQUFVLEtBQ1YsTUFBVSxLQUNWLE1BQVUsS0FDVixNQUFVLEtBQ1YsTUFBVSxLQUNWLE9BQVcsS0FDWCxPQUFXLEtBQ1gsS0FBUyxLQUNULE9BQVcsS0FDWCxPQUFXLEtBQ1gsTUFBVSxLQUNWLE1BQVUsS0FDVixPQUFXLEtBQ1gsT0FBVyxLQUNYLE1BQVUsS0FDVixNQUFVLEtBQ1YsS0FBUyxLQUNULE1BQVUsS0FDVixPQUFXLEtBQ1gsS0FBUyxLQUNULE1BQVUsS0FDVixRQUFZLEtBQ1osS0FBUyxLQUNULEtBQVMsS0FDVCxLQUFTLEtBQ1QsS0FBUyxLQUNULEtBQVMsS0FDVCxNQUFVLEtBQ1YsS0FBUyxLQUNULEtBQVMsS0FDVCxLQUFTLEtBQ1QsS0FBUyxLQUNULEtBQVMsS0FDVCxPQUFXLEtBQ1gsS0FBUyxLQUNULE1BQVUsS0FDVixNQUFVLEtBQ1YsTUFBVSxLQUNWLEtBQVMsS0FDVCxNQUFVLEtBQ1YsR0FBTyxLQUNQLEtBQVMsS0FDVCxJQUFRLEtBQ1IsTUFBVSxLQUNWLE9BQVcsS0FDWCxNQUFVLEtBQ1YsS0FBUyxLQUNULE1BQVUsS0FDVixJQUFRLEtBQ1IsSUFBUSxLQUNSLEdBQU8s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SUFBTUEsRUFFUCxPQURBNmxHLEVBQW9COTVFLEVBQUUrWCxFQUFRLENBQUUvbEIsRUFBRytsQixJQUM1QkEsR0NMUitoRSxFQUFvQjk1RSxFQUFJLENBQUNoc0IsRUFBU21tRyxLQUNqQyxJQUFJLElBQUk5akcsS0FBTzhqRyxFQUNYTCxFQUFvQmhpRSxFQUFFcWlFLEVBQVk5akcsS0FBU3lqRyxFQUFvQmhpRSxFQUFFOWpDLEVBQVNxQyxJQUM1RUgsT0FBT2dELGVBQWVsRixFQUFTcUMsRUFBSyxDQUFFcWIsWUFBWSxFQUFNZ0wsSUFBS3k5RSxFQUFXOWpHLE1DSjNFeWpHLEVBQW9COWlHLEVBQUksV0FDdkIsR0FBMEIsaUJBQWZvakcsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPbjNGLE1BQVEsSUFBSXhCLFNBQVMsY0FBYixHQUNkLE1BQU80UCxHQUNSLEdBQXNCLGlCQUFYakksT0FBcUIsT0FBT0EsUUFMakIsR0NBeEIwd0YsRUFBb0JoaUUsRUFBSSxDQUFDM3ZCLEVBQUs4b0YsSUFBUy82RixPQUFPbUwsVUFBVVUsZUFBZUwsS0FBS3lHLEVBQUs4b0YsR0NDakY2SSxFQUFvQng5RSxFQUFLdG9CLElBQ0gsb0JBQVhpTyxRQUEwQkEsT0FBT00sYUFDMUNyTSxPQUFPZ0QsZUFBZWxGLEVBQVNpTyxPQUFPTSxZQUFhLENBQUU1TSxNQUFPLFdBRTdETyxPQUFPZ0QsZUFBZWxGLEVBQVMsYUFBYyxDQUFFMkIsT0FBTyxLQ0x2RG1rRyxFQUFvQk8sSUFBT3BtRyxJQUMxQkEsRUFBT3FtRyxNQUFRLEdBQ1ZybUcsRUFBT3duRSxXQUFVeG5FLEVBQU93bkUsU0FBVyxJQUNqQ3huRSxHTkFSNmxHLEVBQW9CLE1BQ2JBLEVBQW9CLE8iLCJmaWxlIjoibGFuZHhtbC5icm93c2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wibGFuZHhtbFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJsYW5keG1sXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgbWV0YV8xID0gcmVxdWlyZShcIkB0dXJmL21ldGFcIik7XG4vLyBOb3RlOiBjaGFuZ2UgUkFESVVTID0+IGVhcnRoUmFkaXVzXG52YXIgUkFESVVTID0gNjM3ODEzNztcbi8qKlxuICogVGFrZXMgb25lIG9yIG1vcmUgZmVhdHVyZXMgYW5kIHJldHVybnMgdGhlaXIgYXJlYSBpbiBzcXVhcmUgbWV0ZXJzLlxuICpcbiAqIEBuYW1lIGFyZWFcbiAqIEBwYXJhbSB7R2VvSlNPTn0gZ2VvanNvbiBpbnB1dCBHZW9KU09OIGZlYXR1cmUocylcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFyZWEgaW4gc3F1YXJlIG1ldGVyc1xuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWzEyNSwgLTE1XSwgWzExMywgLTIyXSwgWzE1NCwgLTI3XSwgWzE0NCwgLTE1XSwgWzEyNSwgLTE1XV1dKTtcbiAqXG4gKiB2YXIgYXJlYSA9IHR1cmYuYXJlYShwb2x5Z29uKTtcbiAqXG4gKiAvL2FkZFRvTWFwXG4gKiB2YXIgYWRkVG9NYXAgPSBbcG9seWdvbl1cbiAqIHBvbHlnb24ucHJvcGVydGllcy5hcmVhID0gYXJlYVxuICovXG5mdW5jdGlvbiBhcmVhKGdlb2pzb24pIHtcbiAgICByZXR1cm4gbWV0YV8xLmdlb21SZWR1Y2UoZ2VvanNvbiwgZnVuY3Rpb24gKHZhbHVlLCBnZW9tKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSArIGNhbGN1bGF0ZUFyZWEoZ2VvbSk7XG4gICAgfSwgMCk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBhcmVhO1xuLyoqXG4gKiBDYWxjdWxhdGUgQXJlYVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBnZW9tIEdlb0pTT04gR2VvbWV0cmllc1xuICogQHJldHVybnMge251bWJlcn0gYXJlYVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVBcmVhKGdlb20pIHtcbiAgICB2YXIgdG90YWwgPSAwO1xuICAgIHZhciBpO1xuICAgIHN3aXRjaCAoZ2VvbS50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJQb2x5Z29uXCI6XG4gICAgICAgICAgICByZXR1cm4gcG9seWdvbkFyZWEoZ2VvbS5jb29yZGluYXRlcyk7XG4gICAgICAgIGNhc2UgXCJNdWx0aVBvbHlnb25cIjpcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9tLmNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gcG9seWdvbkFyZWEoZ2VvbS5jb29yZGluYXRlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdG90YWw7XG4gICAgICAgIGNhc2UgXCJQb2ludFwiOlxuICAgICAgICBjYXNlIFwiTXVsdGlQb2ludFwiOlxuICAgICAgICBjYXNlIFwiTGluZVN0cmluZ1wiOlxuICAgICAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiBwb2x5Z29uQXJlYShjb29yZHMpIHtcbiAgICB2YXIgdG90YWwgPSAwO1xuICAgIGlmIChjb29yZHMgJiYgY29vcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG90YWwgKz0gTWF0aC5hYnMocmluZ0FyZWEoY29vcmRzWzBdKSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b3RhbCAtPSBNYXRoLmFicyhyaW5nQXJlYShjb29yZHNbaV0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIEBwcml2YXRlXG4gKiBDYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIGFyZWEgb2YgdGhlIHBvbHlnb24gd2VyZSBpdCBwcm9qZWN0ZWQgb250byB0aGUgZWFydGguXG4gKiBOb3RlIHRoYXQgdGhpcyBhcmVhIHdpbGwgYmUgcG9zaXRpdmUgaWYgcmluZyBpcyBvcmllbnRlZCBjbG9ja3dpc2UsIG90aGVyd2lzZSBpdCB3aWxsIGJlIG5lZ2F0aXZlLlxuICpcbiAqIFJlZmVyZW5jZTpcbiAqIFJvYmVydC4gRy4gQ2hhbWJlcmxhaW4gYW5kIFdpbGxpYW0gSC4gRHVxdWV0dGUsIFwiU29tZSBBbGdvcml0aG1zIGZvciBQb2x5Z29ucyBvbiBhIFNwaGVyZVwiLFxuICogSlBMIFB1YmxpY2F0aW9uIDA3LTAzLCBKZXQgUHJvcHVsc2lvblxuICogTGFib3JhdG9yeSwgUGFzYWRlbmEsIENBLCBKdW5lIDIwMDcgaHR0cDovL3Rycy1uZXcuanBsLm5hc2EuZ292L2RzcGFjZS9oYW5kbGUvMjAxNC80MDQwOVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkcyBSaW5nIENvb3JkaW5hdGVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYXBwcm94aW1hdGUgc2lnbmVkIGdlb2Rlc2ljIGFyZWEgb2YgdGhlIHBvbHlnb24gaW4gc3F1YXJlIG1ldGVycy5cbiAqL1xuZnVuY3Rpb24gcmluZ0FyZWEoY29vcmRzKSB7XG4gICAgdmFyIHAxO1xuICAgIHZhciBwMjtcbiAgICB2YXIgcDM7XG4gICAgdmFyIGxvd2VySW5kZXg7XG4gICAgdmFyIG1pZGRsZUluZGV4O1xuICAgIHZhciB1cHBlckluZGV4O1xuICAgIHZhciBpO1xuICAgIHZhciB0b3RhbCA9IDA7XG4gICAgdmFyIGNvb3Jkc0xlbmd0aCA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgaWYgKGNvb3Jkc0xlbmd0aCA+IDIpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gY29vcmRzTGVuZ3RoIC0gMikge1xuICAgICAgICAgICAgICAgIGxvd2VySW5kZXggPSBjb29yZHNMZW5ndGggLSAyO1xuICAgICAgICAgICAgICAgIG1pZGRsZUluZGV4ID0gY29vcmRzTGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB1cHBlckluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPT09IGNvb3Jkc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBsb3dlckluZGV4ID0gY29vcmRzTGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBtaWRkbGVJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgdXBwZXJJbmRleCA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb3dlckluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBtaWRkbGVJbmRleCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSBpICsgMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAxID0gY29vcmRzW2xvd2VySW5kZXhdO1xuICAgICAgICAgICAgcDIgPSBjb29yZHNbbWlkZGxlSW5kZXhdO1xuICAgICAgICAgICAgcDMgPSBjb29yZHNbdXBwZXJJbmRleF07XG4gICAgICAgICAgICB0b3RhbCArPSAocmFkKHAzWzBdKSAtIHJhZChwMVswXSkpICogTWF0aC5zaW4ocmFkKHAyWzFdKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG90YWwgPSB0b3RhbCAqIFJBRElVUyAqIFJBRElVUyAvIDI7XG4gICAgfVxuICAgIHJldHVybiB0b3RhbDtcbn1cbmZ1bmN0aW9uIHJhZChudW0pIHtcbiAgICByZXR1cm4gbnVtICogTWF0aC5QSSAvIDE4MDtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqXG4gKiBSZXR1cm5zIGEgY2xvbmVkIGNvcHkgb2YgdGhlIHBhc3NlZCBHZW9KU09OIE9iamVjdCwgaW5jbHVkaW5nIHBvc3NpYmxlICdGb3JlaWduIE1lbWJlcnMnLlxuICogfjMtNXggZmFzdGVyIHRoYW4gdGhlIGNvbW1vbiBKU09OLnBhcnNlICsgSlNPTi5zdHJpbmdpZnkgY29tYm8gbWV0aG9kLlxuICpcbiAqIEBuYW1lIGNsb25lXG4gKiBAcGFyYW0ge0dlb0pTT059IGdlb2pzb24gR2VvSlNPTiBPYmplY3RcbiAqIEByZXR1cm5zIHtHZW9KU09OfSBjbG9uZWQgR2VvSlNPTiBPYmplY3RcbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZSA9IHR1cmYubGluZVN0cmluZyhbWy03NCwgNDBdLCBbLTc4LCA0Ml0sIFstODIsIDM1XV0sIHtjb2xvcjogJ3JlZCd9KTtcbiAqXG4gKiB2YXIgbGluZUNsb25lZCA9IHR1cmYuY2xvbmUobGluZSk7XG4gKi9cbmZ1bmN0aW9uIGNsb25lKGdlb2pzb24pIHtcbiAgICBpZiAoIWdlb2pzb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VvanNvbiBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkZlYXR1cmVcIjpcbiAgICAgICAgICAgIHJldHVybiBjbG9uZUZlYXR1cmUoZ2VvanNvbik7XG4gICAgICAgIGNhc2UgXCJGZWF0dXJlQ29sbGVjdGlvblwiOlxuICAgICAgICAgICAgcmV0dXJuIGNsb25lRmVhdHVyZUNvbGxlY3Rpb24oZ2VvanNvbik7XG4gICAgICAgIGNhc2UgXCJQb2ludFwiOlxuICAgICAgICBjYXNlIFwiTGluZVN0cmluZ1wiOlxuICAgICAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgICBjYXNlIFwiTXVsdGlQb2ludFwiOlxuICAgICAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6XG4gICAgICAgIGNhc2UgXCJNdWx0aVBvbHlnb25cIjpcbiAgICAgICAgY2FzZSBcIkdlb21ldHJ5Q29sbGVjdGlvblwiOlxuICAgICAgICAgICAgcmV0dXJuIGNsb25lR2VvbWV0cnkoZ2VvanNvbik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIEdlb0pTT04gdHlwZVwiKTtcbiAgICB9XG59XG4vKipcbiAqIENsb25lIEZlYXR1cmVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGZWF0dXJlPGFueT59IGdlb2pzb24gR2VvSlNPTiBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxhbnk+fSBjbG9uZWQgRmVhdHVyZVxuICovXG5mdW5jdGlvbiBjbG9uZUZlYXR1cmUoZ2VvanNvbikge1xuICAgIHZhciBjbG9uZWQgPSB7IHR5cGU6IFwiRmVhdHVyZVwiIH07XG4gICAgLy8gUHJlc2VydmUgRm9yZWlnbiBNZW1iZXJzXG4gICAgT2JqZWN0LmtleXMoZ2VvanNvbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIFwidHlwZVwiOlxuICAgICAgICAgICAgY2FzZSBcInByb3BlcnRpZXNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJnZW9tZXRyeVwiOlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2xvbmVkW2tleV0gPSBnZW9qc29uW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZGQgcHJvcGVydGllcyAmIGdlb21ldHJ5IGxhc3RcbiAgICBjbG9uZWQucHJvcGVydGllcyA9IGNsb25lUHJvcGVydGllcyhnZW9qc29uLnByb3BlcnRpZXMpO1xuICAgIGNsb25lZC5nZW9tZXRyeSA9IGNsb25lR2VvbWV0cnkoZ2VvanNvbi5nZW9tZXRyeSk7XG4gICAgcmV0dXJuIGNsb25lZDtcbn1cbi8qKlxuICogQ2xvbmUgUHJvcGVydGllc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBHZW9KU09OIFByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZCBQcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGNsb25lUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGNsb25lZCA9IHt9O1xuICAgIGlmICghcHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydGllc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbnVsbFxuICAgICAgICAgICAgICAgIGNsb25lZFtrZXldID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIEFycmF5XG4gICAgICAgICAgICAgICAgY2xvbmVkW2tleV0gPSB2YWx1ZS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgZ2VuZXJpYyBPYmplY3RcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IGNsb25lUHJvcGVydGllcyh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjbG9uZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lZDtcbn1cbi8qKlxuICogQ2xvbmUgRmVhdHVyZSBDb2xsZWN0aW9uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb248YW55Pn0gZ2VvanNvbiBHZW9KU09OIEZlYXR1cmUgQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPGFueT59IGNsb25lZCBGZWF0dXJlIENvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY2xvbmVGZWF0dXJlQ29sbGVjdGlvbihnZW9qc29uKSB7XG4gICAgdmFyIGNsb25lZCA9IHsgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiIH07XG4gICAgLy8gUHJlc2VydmUgRm9yZWlnbiBNZW1iZXJzXG4gICAgT2JqZWN0LmtleXMoZ2VvanNvbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIFwidHlwZVwiOlxuICAgICAgICAgICAgY2FzZSBcImZlYXR1cmVzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IGdlb2pzb25ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFkZCBmZWF0dXJlc1xuICAgIGNsb25lZC5mZWF0dXJlcyA9IGdlb2pzb24uZmVhdHVyZXMubWFwKGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gICAgICAgIHJldHVybiBjbG9uZUZlYXR1cmUoZmVhdHVyZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lZDtcbn1cbi8qKlxuICogQ2xvbmUgR2VvbWV0cnlcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtHZW9tZXRyeTxhbnk+fSBnZW9tZXRyeSBHZW9KU09OIEdlb21ldHJ5XG4gKiBAcmV0dXJucyB7R2VvbWV0cnk8YW55Pn0gY2xvbmVkIEdlb21ldHJ5XG4gKi9cbmZ1bmN0aW9uIGNsb25lR2VvbWV0cnkoZ2VvbWV0cnkpIHtcbiAgICB2YXIgZ2VvbSA9IHsgdHlwZTogZ2VvbWV0cnkudHlwZSB9O1xuICAgIGlmIChnZW9tZXRyeS5iYm94KSB7XG4gICAgICAgIGdlb20uYmJveCA9IGdlb21ldHJ5LmJib3g7XG4gICAgfVxuICAgIGlmIChnZW9tZXRyeS50eXBlID09PSBcIkdlb21ldHJ5Q29sbGVjdGlvblwiKSB7XG4gICAgICAgIGdlb20uZ2VvbWV0cmllcyA9IGdlb21ldHJ5Lmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uIChnKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVHZW9tZXRyeShnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBnZW9tO1xuICAgIH1cbiAgICBnZW9tLmNvb3JkaW5hdGVzID0gZGVlcFNsaWNlKGdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcbiAgICByZXR1cm4gZ2VvbTtcbn1cbi8qKlxuICogRGVlcCBTbGljZSBjb29yZGluYXRlc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Nvb3JkaW5hdGVzfSBjb29yZHMgQ29vcmRpbmF0ZXNcbiAqIEByZXR1cm5zIHtDb29yZGluYXRlc30gYWxsIGNvb3JkaW5hdGVzIHNsaWNlZFxuICovXG5mdW5jdGlvbiBkZWVwU2xpY2UoY29vcmRzKSB7XG4gICAgdmFyIGNsb25lZCA9IGNvb3JkcztcbiAgICBpZiAodHlwZW9mIGNsb25lZFswXSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gY2xvbmVkLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZWQubWFwKGZ1bmN0aW9uIChjb29yZCkge1xuICAgICAgICByZXR1cm4gZGVlcFNsaWNlKGNvb3JkKTtcbiAgICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IGNsb25lO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKipcbiAqIEBtb2R1bGUgaGVscGVyc1xuICovXG4vKipcbiAqIEVhcnRoIFJhZGl1cyB1c2VkIHdpdGggdGhlIEhhcnZlc2luZSBmb3JtdWxhIGFuZCBhcHByb3hpbWF0ZXMgdXNpbmcgYSBzcGhlcmljYWwgKG5vbi1lbGxpcHNvaWQpIEVhcnRoLlxuICpcbiAqIEBtZW1iZXJvZiBoZWxwZXJzXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5leHBvcnRzLmVhcnRoUmFkaXVzID0gNjM3MTAwOC44O1xuLyoqXG4gKiBVbml0IG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgdXNpbmcgYSBzcGhlcmljYWwgKG5vbi1lbGxpcHNvaWQpIGVhcnRoIHJhZGl1cy5cbiAqXG4gKiBAbWVtYmVyb2YgaGVscGVyc1xuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0cy5mYWN0b3JzID0ge1xuICAgIGNlbnRpbWV0ZXJzOiBleHBvcnRzLmVhcnRoUmFkaXVzICogMTAwLFxuICAgIGNlbnRpbWV0cmVzOiBleHBvcnRzLmVhcnRoUmFkaXVzICogMTAwLFxuICAgIGRlZ3JlZXM6IGV4cG9ydHMuZWFydGhSYWRpdXMgLyAxMTEzMjUsXG4gICAgZmVldDogZXhwb3J0cy5lYXJ0aFJhZGl1cyAqIDMuMjgwODQsXG4gICAgaW5jaGVzOiBleHBvcnRzLmVhcnRoUmFkaXVzICogMzkuMzcwLFxuICAgIGtpbG9tZXRlcnM6IGV4cG9ydHMuZWFydGhSYWRpdXMgLyAxMDAwLFxuICAgIGtpbG9tZXRyZXM6IGV4cG9ydHMuZWFydGhSYWRpdXMgLyAxMDAwLFxuICAgIG1ldGVyczogZXhwb3J0cy5lYXJ0aFJhZGl1cyxcbiAgICBtZXRyZXM6IGV4cG9ydHMuZWFydGhSYWRpdXMsXG4gICAgbWlsZXM6IGV4cG9ydHMuZWFydGhSYWRpdXMgLyAxNjA5LjM0NCxcbiAgICBtaWxsaW1ldGVyczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAqIDEwMDAsXG4gICAgbWlsbGltZXRyZXM6IGV4cG9ydHMuZWFydGhSYWRpdXMgKiAxMDAwLFxuICAgIG5hdXRpY2FsbWlsZXM6IGV4cG9ydHMuZWFydGhSYWRpdXMgLyAxODUyLFxuICAgIHJhZGlhbnM6IDEsXG4gICAgeWFyZHM6IGV4cG9ydHMuZWFydGhSYWRpdXMgLyAxLjA5MzYsXG59O1xuLyoqXG4gKiBVbml0cyBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIGJhc2VkIG9uIDEgbWV0ZXIuXG4gKlxuICogQG1lbWJlcm9mIGhlbHBlcnNcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydHMudW5pdHNGYWN0b3JzID0ge1xuICAgIGNlbnRpbWV0ZXJzOiAxMDAsXG4gICAgY2VudGltZXRyZXM6IDEwMCxcbiAgICBkZWdyZWVzOiAxIC8gMTExMzI1LFxuICAgIGZlZXQ6IDMuMjgwODQsXG4gICAgaW5jaGVzOiAzOS4zNzAsXG4gICAga2lsb21ldGVyczogMSAvIDEwMDAsXG4gICAga2lsb21ldHJlczogMSAvIDEwMDAsXG4gICAgbWV0ZXJzOiAxLFxuICAgIG1ldHJlczogMSxcbiAgICBtaWxlczogMSAvIDE2MDkuMzQ0LFxuICAgIG1pbGxpbWV0ZXJzOiAxMDAwLFxuICAgIG1pbGxpbWV0cmVzOiAxMDAwLFxuICAgIG5hdXRpY2FsbWlsZXM6IDEgLyAxODUyLFxuICAgIHJhZGlhbnM6IDEgLyBleHBvcnRzLmVhcnRoUmFkaXVzLFxuICAgIHlhcmRzOiAxIC8gMS4wOTM2LFxufTtcbi8qKlxuICogQXJlYSBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIGJhc2VkIG9uIDEgc3F1YXJlIG1ldGVyLlxuICpcbiAqIEBtZW1iZXJvZiBoZWxwZXJzXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnRzLmFyZWFGYWN0b3JzID0ge1xuICAgIGFjcmVzOiAwLjAwMDI0NzEwNSxcbiAgICBjZW50aW1ldGVyczogMTAwMDAsXG4gICAgY2VudGltZXRyZXM6IDEwMDAwLFxuICAgIGZlZXQ6IDEwLjc2MzkxMDQxNyxcbiAgICBpbmNoZXM6IDE1NTAuMDAzMTAwMDA2LFxuICAgIGtpbG9tZXRlcnM6IDAuMDAwMDAxLFxuICAgIGtpbG9tZXRyZXM6IDAuMDAwMDAxLFxuICAgIG1ldGVyczogMSxcbiAgICBtZXRyZXM6IDEsXG4gICAgbWlsZXM6IDMuODZlLTcsXG4gICAgbWlsbGltZXRlcnM6IDEwMDAwMDAsXG4gICAgbWlsbGltZXRyZXM6IDEwMDAwMDAsXG4gICAgeWFyZHM6IDEuMTk1OTkwMDQ2LFxufTtcbi8qKlxuICogV3JhcHMgYSBHZW9KU09OIHtAbGluayBHZW9tZXRyeX0gaW4gYSBHZW9KU09OIHtAbGluayBGZWF0dXJlfS5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBnZW9tZXRyeSBpbnB1dCBnZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlfSBhIEdlb0pTT04gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBnZW9tZXRyeSA9IHtcbiAqICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA1MF1cbiAqIH07XG4gKlxuICogdmFyIGZlYXR1cmUgPSB0dXJmLmZlYXR1cmUoZ2VvbWV0cnkpO1xuICpcbiAqIC8vPWZlYXR1cmVcbiAqL1xuZnVuY3Rpb24gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZmVhdCA9IHsgdHlwZTogXCJGZWF0dXJlXCIgfTtcbiAgICBpZiAob3B0aW9ucy5pZCA9PT0gMCB8fCBvcHRpb25zLmlkKSB7XG4gICAgICAgIGZlYXQuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5iYm94KSB7XG4gICAgICAgIGZlYXQuYmJveCA9IG9wdGlvbnMuYmJveDtcbiAgICB9XG4gICAgZmVhdC5wcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICBmZWF0Lmdlb21ldHJ5ID0gZ2VvbTtcbiAgICByZXR1cm4gZmVhdDtcbn1cbmV4cG9ydHMuZmVhdHVyZSA9IGZlYXR1cmU7XG4vKipcbiAqIENyZWF0ZXMgYSBHZW9KU09OIHtAbGluayBHZW9tZXRyeX0gZnJvbSBhIEdlb21ldHJ5IHN0cmluZyB0eXBlICYgY29vcmRpbmF0ZXMuXG4gKiBGb3IgR2VvbWV0cnlDb2xsZWN0aW9uIHR5cGUgdXNlIGBoZWxwZXJzLmdlb21ldHJ5Q29sbGVjdGlvbmBcbiAqXG4gKiBAbmFtZSBnZW9tZXRyeVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgR2VvbWV0cnkgVHlwZVxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBjb29yZGluYXRlcyBDb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyB7R2VvbWV0cnl9IGEgR2VvSlNPTiBHZW9tZXRyeVxuICogQGV4YW1wbGVcbiAqIHZhciB0eXBlID0gXCJQb2ludFwiO1xuICogdmFyIGNvb3JkaW5hdGVzID0gWzExMCwgNTBdO1xuICogdmFyIGdlb21ldHJ5ID0gdHVyZi5nZW9tZXRyeSh0eXBlLCBjb29yZGluYXRlcyk7XG4gKiAvLyA9PiBnZW9tZXRyeVxuICovXG5mdW5jdGlvbiBnZW9tZXRyeSh0eXBlLCBjb29yZGluYXRlcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJQb2ludFwiOiByZXR1cm4gcG9pbnQoY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuICAgICAgICBjYXNlIFwiTGluZVN0cmluZ1wiOiByZXR1cm4gbGluZVN0cmluZyhjb29yZGluYXRlcykuZ2VvbWV0cnk7XG4gICAgICAgIGNhc2UgXCJQb2x5Z29uXCI6IHJldHVybiBwb2x5Z29uKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcbiAgICAgICAgY2FzZSBcIk11bHRpUG9pbnRcIjogcmV0dXJuIG11bHRpUG9pbnQoY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuICAgICAgICBjYXNlIFwiTXVsdGlMaW5lU3RyaW5nXCI6IHJldHVybiBtdWx0aUxpbmVTdHJpbmcoY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuICAgICAgICBjYXNlIFwiTXVsdGlQb2x5Z29uXCI6IHJldHVybiBtdWx0aVBvbHlnb24oY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IodHlwZSArIFwiIGlzIGludmFsaWRcIik7XG4gICAgfVxufVxuZXhwb3J0cy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvaW50fSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhIFBvc2l0aW9uLlxuICpcbiAqIEBuYW1lIHBvaW50XG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvb3JkaW5hdGVzIGxvbmdpdHVkZSwgbGF0aXR1ZGUgcG9zaXRpb24gKGVhY2ggaW4gZGVjaW1hbCBkZWdyZWVzKVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvaW50Pn0gYSBQb2ludCBmZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50ID0gdHVyZi5wb2ludChbLTc1LjM0MywgMzkuOTg0XSk7XG4gKlxuICogLy89cG9pbnRcbiAqL1xuZnVuY3Rpb24gcG9pbnQoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBnZW9tID0ge1xuICAgICAgICB0eXBlOiBcIlBvaW50XCIsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyxcbiAgICB9O1xuICAgIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wb2ludCA9IHBvaW50O1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvaW50fSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgUG9pbnQgY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgcG9pbnRzXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gVHJhbnNsYXRlIHRoZXNlIHByb3BlcnRpZXMgdG8gZWFjaCBGZWF0dXJlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdXG4gKiBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD59IFBvaW50IEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnRzID0gdHVyZi5wb2ludHMoW1xuICogICBbLTc1LCAzOV0sXG4gKiAgIFstODAsIDQ1XSxcbiAqICAgWy03OCwgNTBdXG4gKiBdKTtcbiAqXG4gKiAvLz1wb2ludHNcbiAqL1xuZnVuY3Rpb24gcG9pbnRzKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wb2ludHMgPSBwb2ludHM7XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9seWdvbn0ge0BsaW5rIEZlYXR1cmV9IGZyb20gYW4gQXJyYXkgb2YgTGluZWFyUmluZ3MuXG4gKlxuICogQG5hbWUgcG9seWdvblxuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVhclJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8UG9seWdvbj59IFBvbHlnb24gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWy01LCA1Ml0sIFstNCwgNTZdLCBbLTIsIDUxXSwgWy03LCA1NF0sIFstNSwgNTJdXV0sIHsgbmFtZTogJ3BvbHkxJyB9KTtcbiAqXG4gKiAvLz1wb2x5Z29uXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb24oY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIGZvciAodmFyIF9pID0gMCwgY29vcmRpbmF0ZXNfMSA9IGNvb3JkaW5hdGVzOyBfaSA8IGNvb3JkaW5hdGVzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciByaW5nID0gY29vcmRpbmF0ZXNfMVtfaV07XG4gICAgICAgIGlmIChyaW5nLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVhY2ggTGluZWFyUmluZyBvZiBhIFBvbHlnb24gbXVzdCBoYXZlIDQgb3IgbW9yZSBQb3NpdGlvbnMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZ1tyaW5nLmxlbmd0aCAtIDFdLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBmaXJzdCBwb2ludCBvZiBQb2x5Z29uIGNvbnRhaW5zIHR3byBudW1iZXJzXG4gICAgICAgICAgICBpZiAocmluZ1tyaW5nLmxlbmd0aCAtIDFdW2pdICE9PSByaW5nWzBdW2pdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgdHlwZTogXCJQb2x5Z29uXCIsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyxcbiAgICB9O1xuICAgIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wb2x5Z29uID0gcG9seWdvbjtcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2x5Z29ufSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgUG9seWdvbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBwb2x5Z29uc1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2x5Z29uIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uPn0gUG9seWdvbiBGZWF0dXJlQ29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29ucyA9IHR1cmYucG9seWdvbnMoW1xuICogICBbW1stNSwgNTJdLCBbLTQsIDU2XSwgWy0yLCA1MV0sIFstNywgNTRdLCBbLTUsIDUyXV1dLFxuICogICBbW1stMTUsIDQyXSwgWy0xNCwgNDZdLCBbLTEyLCA0MV0sIFstMTcsIDQ0XSwgWy0xNSwgNDJdXV0sXG4gKiBdKTtcbiAqXG4gKiAvLz1wb2x5Z29uc1xuICovXG5mdW5jdGlvbiBwb2x5Z29ucyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBwb2x5Z29uKGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wb2x5Z29ucyA9IHBvbHlnb25zO1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIExpbmVTdHJpbmd9IHtAbGluayBGZWF0dXJlfSBmcm9tIGFuIEFycmF5IG9mIFBvc2l0aW9ucy5cbiAqXG4gKiBAbmFtZSBsaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb3NpdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gTGluZVN0cmluZyBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmVzdHJpbmcxID0gdHVyZi5saW5lU3RyaW5nKFtbLTI0LCA2M10sIFstMjMsIDYwXSwgWy0yNSwgNjVdLCBbLTIwLCA2OV1dLCB7bmFtZTogJ2xpbmUgMSd9KTtcbiAqIHZhciBsaW5lc3RyaW5nMiA9IHR1cmYubGluZVN0cmluZyhbWy0xNCwgNDNdLCBbLTEzLCA0MF0sIFstMTUsIDQ1XSwgWy0xMCwgNDldXSwge25hbWU6ICdsaW5lIDInfSk7XG4gKlxuICogLy89bGluZXN0cmluZzFcbiAqIC8vPWxpbmVzdHJpbmcyXG4gKi9cbmZ1bmN0aW9uIGxpbmVTdHJpbmcoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIGlmIChjb29yZGluYXRlcy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkaW5hdGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgdHdvIG9yIG1vcmUgcG9zaXRpb25zXCIpO1xuICAgIH1cbiAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgdHlwZTogXCJMaW5lU3RyaW5nXCIsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyxcbiAgICB9O1xuICAgIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5saW5lU3RyaW5nID0gbGluZVN0cmluZztcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBMaW5lU3RyaW5nfSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgTGluZVN0cmluZyBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBsaW5lU3RyaW5nc1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVhclJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF1cbiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPExpbmVTdHJpbmc+fSBMaW5lU3RyaW5nIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmVzdHJpbmdzID0gdHVyZi5saW5lU3RyaW5ncyhbXG4gKiAgIFtbLTI0LCA2M10sIFstMjMsIDYwXSwgWy0yNSwgNjVdLCBbLTIwLCA2OV1dLFxuICogICBbWy0xNCwgNDNdLCBbLTEzLCA0MF0sIFstMTUsIDQ1XSwgWy0xMCwgNDldXVxuICogXSk7XG4gKlxuICogLy89bGluZXN0cmluZ3NcbiAqL1xuZnVuY3Rpb24gbGluZVN0cmluZ3MoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gbGluZVN0cmluZyhjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMubGluZVN0cmluZ3MgPSBsaW5lU3RyaW5ncztcbi8qKlxuICogVGFrZXMgb25lIG9yIG1vcmUge0BsaW5rIEZlYXR1cmV8RmVhdHVyZXN9IGFuZCBjcmVhdGVzIGEge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufS5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtGZWF0dXJlW119IGZlYXR1cmVzIGlucHV0IGZlYXR1cmVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbn0gRmVhdHVyZUNvbGxlY3Rpb24gb2YgRmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiB2YXIgbG9jYXRpb25BID0gdHVyZi5wb2ludChbLTc1LjM0MywgMzkuOTg0XSwge25hbWU6ICdMb2NhdGlvbiBBJ30pO1xuICogdmFyIGxvY2F0aW9uQiA9IHR1cmYucG9pbnQoWy03NS44MzMsIDM5LjI4NF0sIHtuYW1lOiAnTG9jYXRpb24gQid9KTtcbiAqIHZhciBsb2NhdGlvbkMgPSB0dXJmLnBvaW50KFstNzUuNTM0LCAzOS4xMjNdLCB7bmFtZTogJ0xvY2F0aW9uIEMnfSk7XG4gKlxuICogdmFyIGNvbGxlY3Rpb24gPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgbG9jYXRpb25BLFxuICogICBsb2NhdGlvbkIsXG4gKiAgIGxvY2F0aW9uQ1xuICogXSk7XG4gKlxuICogLy89Y29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBmZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIGZjID0geyB0eXBlOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIgfTtcbiAgICBpZiAob3B0aW9ucy5pZCkge1xuICAgICAgICBmYy5pZCA9IG9wdGlvbnMuaWQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJib3gpIHtcbiAgICAgICAgZmMuYmJveCA9IG9wdGlvbnMuYmJveDtcbiAgICB9XG4gICAgZmMuZmVhdHVyZXMgPSBmZWF0dXJlcztcbiAgICByZXR1cm4gZmM7XG59XG5leHBvcnRzLmZlYXR1cmVDb2xsZWN0aW9uID0gZmVhdHVyZUNvbGxlY3Rpb247XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aUxpbmVTdHJpbmc+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpTGluZVN0cmluZ1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVTdHJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlMaW5lU3RyaW5nPn0gYSBNdWx0aUxpbmVTdHJpbmcgZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1tbMCwwXSxbMTAsMTBdXV0pO1xuICpcbiAqIC8vPW11bHRpTGluZVxuICovXG5mdW5jdGlvbiBtdWx0aUxpbmVTdHJpbmcoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBnZW9tID0ge1xuICAgICAgICB0eXBlOiBcIk11bHRpTGluZVN0cmluZ1wiLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMubXVsdGlMaW5lU3RyaW5nID0gbXVsdGlMaW5lU3RyaW5nO1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlQb2ludD59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlQb2ludFxuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9zaXRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlQb2ludD59IGEgTXVsdGlQb2ludCBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVB0ID0gdHVyZi5tdWx0aVBvaW50KFtbMCwwXSxbMTAsMTBdXSk7XG4gKlxuICogLy89bXVsdGlQdFxuICovXG5mdW5jdGlvbiBtdWx0aVBvaW50KGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgdHlwZTogXCJNdWx0aVBvaW50XCIsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyxcbiAgICB9O1xuICAgIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5tdWx0aVBvaW50ID0gbXVsdGlQb2ludDtcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpUG9seWdvbj59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlQb2x5Z29uXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvbHlnb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlQb2x5Z29uPn0gYSBtdWx0aXBvbHlnb24gZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQb2x5ID0gdHVyZi5tdWx0aVBvbHlnb24oW1tbWzAsMF0sWzAsMTBdLFsxMCwxMF0sWzEwLDBdLFswLDBdXV1dKTtcbiAqXG4gKiAvLz1tdWx0aVBvbHlcbiAqXG4gKi9cbmZ1bmN0aW9uIG11bHRpUG9seWdvbihjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIGdlb20gPSB7XG4gICAgICAgIHR5cGU6IFwiTXVsdGlQb2x5Z29uXCIsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcyxcbiAgICB9O1xuICAgIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5tdWx0aVBvbHlnb24gPSBtdWx0aVBvbHlnb247XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxHZW9tZXRyeUNvbGxlY3Rpb24+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIGdlb21ldHJ5Q29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheTxHZW9tZXRyeT59IGdlb21ldHJpZXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBHZW9tZXRyaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8R2VvbWV0cnlDb2xsZWN0aW9uPn0gYSBHZW9KU09OIEdlb21ldHJ5Q29sbGVjdGlvbiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHB0ID0gdHVyZi5nZW9tZXRyeShcIlBvaW50XCIsIFsxMDAsIDBdKTtcbiAqIHZhciBsaW5lID0gdHVyZi5nZW9tZXRyeShcIkxpbmVTdHJpbmdcIiwgW1sxMDEsIDBdLCBbMTAyLCAxXV0pO1xuICogdmFyIGNvbGxlY3Rpb24gPSB0dXJmLmdlb21ldHJ5Q29sbGVjdGlvbihbcHQsIGxpbmVdKTtcbiAqXG4gKiAvLyA9PiBjb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdlb21ldHJ5Q29sbGVjdGlvbihnZW9tZXRyaWVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgdHlwZTogXCJHZW9tZXRyeUNvbGxlY3Rpb25cIixcbiAgICAgICAgZ2VvbWV0cmllczogZ2VvbWV0cmllcyxcbiAgICB9O1xuICAgIHJldHVybiBmZWF0dXJlKGdlb20sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5nZW9tZXRyeUNvbGxlY3Rpb24gPSBnZW9tZXRyeUNvbGxlY3Rpb247XG4vKipcbiAqIFJvdW5kIG51bWJlciB0byBwcmVjaXNpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtIE51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gUHJlY2lzaW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSByb3VuZGVkIG51bWJlclxuICogQGV4YW1wbGVcbiAqIHR1cmYucm91bmQoMTIwLjQzMjEpXG4gKiAvLz0xMjBcbiAqXG4gKiB0dXJmLnJvdW5kKDEyMC40MzIxLCAyKVxuICogLy89MTIwLjQzXG4gKi9cbmZ1bmN0aW9uIHJvdW5kKG51bSwgcHJlY2lzaW9uKSB7XG4gICAgaWYgKHByZWNpc2lvbiA9PT0gdm9pZCAwKSB7IHByZWNpc2lvbiA9IDA7IH1cbiAgICBpZiAocHJlY2lzaW9uICYmICEocHJlY2lzaW9uID49IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInByZWNpc2lvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xuICAgIH1cbiAgICB2YXIgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCk7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogbXVsdGlwbGllcikgLyBtdWx0aXBsaWVyO1xufVxuZXhwb3J0cy5yb3VuZCA9IHJvdW5kO1xuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIHJhZGlhbnMgdG8gYSBtb3JlIGZyaWVuZGx5IHVuaXQuXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBuYW1lIHJhZGlhbnNUb0xlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgaW4gcmFkaWFucyBhY3Jvc3MgdGhlIHNwaGVyZVxuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1cImtpbG9tZXRlcnNcIl0gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcyxcbiAqIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIHJhZGlhbnNUb0xlbmd0aChyYWRpYW5zLCB1bml0cykge1xuICAgIGlmICh1bml0cyA9PT0gdm9pZCAwKSB7IHVuaXRzID0gXCJraWxvbWV0ZXJzXCI7IH1cbiAgICB2YXIgZmFjdG9yID0gZXhwb3J0cy5mYWN0b3JzW3VuaXRzXTtcbiAgICBpZiAoIWZhY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodW5pdHMgKyBcIiB1bml0cyBpcyBpbnZhbGlkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmFkaWFucyAqIGZhY3Rvcjtcbn1cbmV4cG9ydHMucmFkaWFuc1RvTGVuZ3RoID0gcmFkaWFuc1RvTGVuZ3RoO1xuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIGEgcmVhbC13b3JsZCB1bml0IGludG8gcmFkaWFuc1xuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAbmFtZSBsZW5ndGhUb1JhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBpbiByZWFsIHVuaXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPVwia2lsb21ldGVyc1wiXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLFxuICogbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gcmFkaWFuc1xuICovXG5mdW5jdGlvbiBsZW5ndGhUb1JhZGlhbnMoZGlzdGFuY2UsIHVuaXRzKSB7XG4gICAgaWYgKHVuaXRzID09PSB2b2lkIDApIHsgdW5pdHMgPSBcImtpbG9tZXRlcnNcIjsgfVxuICAgIHZhciBmYWN0b3IgPSBleHBvcnRzLmZhY3RvcnNbdW5pdHNdO1xuICAgIGlmICghZmFjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih1bml0cyArIFwiIHVuaXRzIGlzIGludmFsaWRcIik7XG4gICAgfVxuICAgIHJldHVybiBkaXN0YW5jZSAvIGZhY3Rvcjtcbn1cbmV4cG9ydHMubGVuZ3RoVG9SYWRpYW5zID0gbGVuZ3RoVG9SYWRpYW5zO1xuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIGEgcmVhbC13b3JsZCB1bml0IGludG8gZGVncmVlc1xuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywgY2VudGltZXRlcnMsIGtpbG9tZXRyZXMsIGZlZXRcbiAqXG4gKiBAbmFtZSBsZW5ndGhUb0RlZ3JlZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBpbiByZWFsIHVuaXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPVwia2lsb21ldGVyc1wiXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLFxuICogbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gZGVncmVlc1xuICovXG5mdW5jdGlvbiBsZW5ndGhUb0RlZ3JlZXMoZGlzdGFuY2UsIHVuaXRzKSB7XG4gICAgcmV0dXJuIHJhZGlhbnNUb0RlZ3JlZXMobGVuZ3RoVG9SYWRpYW5zKGRpc3RhbmNlLCB1bml0cykpO1xufVxuZXhwb3J0cy5sZW5ndGhUb0RlZ3JlZXMgPSBsZW5ndGhUb0RlZ3JlZXM7XG4vKipcbiAqIENvbnZlcnRzIGFueSBiZWFyaW5nIGFuZ2xlIGZyb20gdGhlIG5vcnRoIGxpbmUgZGlyZWN0aW9uIChwb3NpdGl2ZSBjbG9ja3dpc2UpXG4gKiBhbmQgcmV0dXJucyBhbiBhbmdsZSBiZXR3ZWVuIDAtMzYwIGRlZ3JlZXMgKHBvc2l0aXZlIGNsb2Nrd2lzZSksIDAgYmVpbmcgdGhlIG5vcnRoIGxpbmVcbiAqXG4gKiBAbmFtZSBiZWFyaW5nVG9BemltdXRoXG4gKiBAcGFyYW0ge251bWJlcn0gYmVhcmluZyBhbmdsZSwgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gYmVhcmluZ1RvQXppbXV0aChiZWFyaW5nKSB7XG4gICAgdmFyIGFuZ2xlID0gYmVhcmluZyAlIDM2MDtcbiAgICBpZiAoYW5nbGUgPCAwKSB7XG4gICAgICAgIGFuZ2xlICs9IDM2MDtcbiAgICB9XG4gICAgcmV0dXJuIGFuZ2xlO1xufVxuZXhwb3J0cy5iZWFyaW5nVG9BemltdXRoID0gYmVhcmluZ1RvQXppbXV0aDtcbi8qKlxuICogQ29udmVydHMgYW4gYW5nbGUgaW4gcmFkaWFucyB0byBkZWdyZWVzXG4gKlxuICogQG5hbWUgcmFkaWFuc1RvRGVncmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgYW5nbGUgaW4gcmFkaWFuc1xuICogQHJldHVybnMge251bWJlcn0gZGVncmVlcyBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykge1xuICAgIHZhciBkZWdyZWVzID0gcmFkaWFucyAlICgyICogTWF0aC5QSSk7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiAxODAgLyBNYXRoLlBJO1xufVxuZXhwb3J0cy5yYWRpYW5zVG9EZWdyZWVzID0gcmFkaWFuc1RvRGVncmVlcztcbi8qKlxuICogQ29udmVydHMgYW4gYW5nbGUgaW4gZGVncmVlcyB0byByYWRpYW5zXG4gKlxuICogQG5hbWUgZGVncmVlc1RvUmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlZ3JlZXMgYW5nbGUgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICogQHJldHVybnMge251bWJlcn0gYW5nbGUgaW4gcmFkaWFuc1xuICovXG5mdW5jdGlvbiBkZWdyZWVzVG9SYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICB2YXIgcmFkaWFucyA9IGRlZ3JlZXMgJSAzNjA7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBNYXRoLlBJIC8gMTgwO1xufVxuZXhwb3J0cy5kZWdyZWVzVG9SYWRpYW5zID0gZGVncmVlc1RvUmFkaWFucztcbi8qKlxuICogQ29udmVydHMgYSBsZW5ndGggdG8gdGhlIHJlcXVlc3RlZCB1bml0LlxuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIHtVbml0c30gW29yaWdpbmFsVW5pdD1cImtpbG9tZXRlcnNcIl0gb2YgdGhlIGxlbmd0aFxuICogQHBhcmFtIHtVbml0c30gW2ZpbmFsVW5pdD1cImtpbG9tZXRlcnNcIl0gcmV0dXJuZWQgdW5pdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGNvbnZlcnRlZCBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gY29udmVydExlbmd0aChsZW5ndGgsIG9yaWdpbmFsVW5pdCwgZmluYWxVbml0KSB7XG4gICAgaWYgKG9yaWdpbmFsVW5pdCA9PT0gdm9pZCAwKSB7IG9yaWdpbmFsVW5pdCA9IFwia2lsb21ldGVyc1wiOyB9XG4gICAgaWYgKGZpbmFsVW5pdCA9PT0gdm9pZCAwKSB7IGZpbmFsVW5pdCA9IFwia2lsb21ldGVyc1wiOyB9XG4gICAgaWYgKCEobGVuZ3RoID49IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImxlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmFkaWFuc1RvTGVuZ3RoKGxlbmd0aFRvUmFkaWFucyhsZW5ndGgsIG9yaWdpbmFsVW5pdCksIGZpbmFsVW5pdCk7XG59XG5leHBvcnRzLmNvbnZlcnRMZW5ndGggPSBjb252ZXJ0TGVuZ3RoO1xuLyoqXG4gKiBDb252ZXJ0cyBhIGFyZWEgdG8gdGhlIHJlcXVlc3RlZCB1bml0LlxuICogVmFsaWQgdW5pdHM6IGtpbG9tZXRlcnMsIGtpbG9tZXRyZXMsIG1ldGVycywgbWV0cmVzLCBjZW50aW1ldHJlcywgbWlsbGltZXRlcnMsIGFjcmVzLCBtaWxlcywgeWFyZHMsIGZlZXQsIGluY2hlc1xuICogQHBhcmFtIHtudW1iZXJ9IGFyZWEgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0ge1VuaXRzfSBbb3JpZ2luYWxVbml0PVwibWV0ZXJzXCJdIG9mIHRoZSBkaXN0YW5jZVxuICogQHBhcmFtIHtVbml0c30gW2ZpbmFsVW5pdD1cImtpbG9tZXRlcnNcIl0gcmV0dXJuZWQgdW5pdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGNvbnZlcnRlZCBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0QXJlYShhcmVhLCBvcmlnaW5hbFVuaXQsIGZpbmFsVW5pdCkge1xuICAgIGlmIChvcmlnaW5hbFVuaXQgPT09IHZvaWQgMCkgeyBvcmlnaW5hbFVuaXQgPSBcIm1ldGVyc1wiOyB9XG4gICAgaWYgKGZpbmFsVW5pdCA9PT0gdm9pZCAwKSB7IGZpbmFsVW5pdCA9IFwia2lsb21ldGVyc1wiOyB9XG4gICAgaWYgKCEoYXJlYSA+PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhcmVhIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXJcIik7XG4gICAgfVxuICAgIHZhciBzdGFydEZhY3RvciA9IGV4cG9ydHMuYXJlYUZhY3RvcnNbb3JpZ2luYWxVbml0XTtcbiAgICBpZiAoIXN0YXJ0RmFjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgb3JpZ2luYWwgdW5pdHNcIik7XG4gICAgfVxuICAgIHZhciBmaW5hbEZhY3RvciA9IGV4cG9ydHMuYXJlYUZhY3RvcnNbZmluYWxVbml0XTtcbiAgICBpZiAoIWZpbmFsRmFjdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZmluYWwgdW5pdHNcIik7XG4gICAgfVxuICAgIHJldHVybiAoYXJlYSAvIHN0YXJ0RmFjdG9yKSAqIGZpbmFsRmFjdG9yO1xufVxuZXhwb3J0cy5jb252ZXJ0QXJlYSA9IGNvbnZlcnRBcmVhO1xuLyoqXG4gKiBpc051bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gbnVtIE51bWJlciB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiB0dXJmLmlzTnVtYmVyKDEyMylcbiAqIC8vPXRydWVcbiAqIHR1cmYuaXNOdW1iZXIoJ2ZvbycpXG4gKiAvLz1mYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcihudW0pIHtcbiAgICByZXR1cm4gIWlzTmFOKG51bSkgJiYgbnVtICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KG51bSkgJiYgIS9eXFxzKiQvLnRlc3QobnVtKTtcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcbi8qKlxuICogaXNPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IGlucHV0IHZhcmlhYmxlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIHR1cmYuaXNPYmplY3Qoe2VsZXZhdGlvbjogMTB9KVxuICogLy89dHJ1ZVxuICogdHVyZi5pc09iamVjdCgnZm9vJylcbiAqIC8vPWZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgcmV0dXJuICghIWlucHV0KSAmJiAoaW5wdXQuY29uc3RydWN0b3IgPT09IE9iamVjdCk7XG59XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG4vKipcbiAqIFZhbGlkYXRlIEJCb3hcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBiYm94IEJCb3ggdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHRocm93cyBFcnJvciBpZiBCQm94IGlzIG5vdCB2YWxpZFxuICogQGV4YW1wbGVcbiAqIHZhbGlkYXRlQkJveChbLTE4MCwgLTQwLCAxMTAsIDUwXSlcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUJCb3goWy0xODAsIC00MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KCdGb28nKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCg1KVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveChudWxsKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCh1bmRlZmluZWQpXG4gKiAvLz1FcnJvclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJCb3goYmJveCkge1xuICAgIGlmICghYmJveCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYm94IGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYmJveCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmJveCBtdXN0IGJlIGFuIEFycmF5XCIpO1xuICAgIH1cbiAgICBpZiAoYmJveC5sZW5ndGggIT09IDQgJiYgYmJveC5sZW5ndGggIT09IDYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmJveCBtdXN0IGJlIGFuIEFycmF5IG9mIDQgb3IgNiBudW1iZXJzXCIpO1xuICAgIH1cbiAgICBiYm94LmZvckVhY2goZnVuY3Rpb24gKG51bSkge1xuICAgICAgICBpZiAoIWlzTnVtYmVyKG51bSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImJib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVyc1wiKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0cy52YWxpZGF0ZUJCb3ggPSB2YWxpZGF0ZUJCb3g7XG4vKipcbiAqIFZhbGlkYXRlIElkXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgSWQgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHRocm93cyBFcnJvciBpZiBJZCBpcyBub3QgdmFsaWRcbiAqIEBleGFtcGxlXG4gKiB2YWxpZGF0ZUlkKFstMTgwLCAtNDAsIDExMCwgNTBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQoWy0xODAsIC00MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZCgnRm9vJylcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUlkKDUpXG4gKiAvLz1PS1xuICogdmFsaWRhdGVJZChudWxsKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQodW5kZWZpbmVkKVxuICogLy89RXJyb3JcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJZChpZCkge1xuICAgIGlmICghaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuICAgIGlmIChbXCJzdHJpbmdcIiwgXCJudW1iZXJcIl0uaW5kZXhPZih0eXBlb2YgaWQpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpZCBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nXCIpO1xuICAgIH1cbn1cbmV4cG9ydHMudmFsaWRhdGVJZCA9IHZhbGlkYXRlSWQ7XG4vLyBEZXByZWNhdGVkIG1ldGhvZHNcbmZ1bmN0aW9uIHJhZGlhbnMyZGVncmVlcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvRGVncmVlc2BcIik7XG59XG5leHBvcnRzLnJhZGlhbnMyZGVncmVlcyA9IHJhZGlhbnMyZGVncmVlcztcbmZ1bmN0aW9uIGRlZ3JlZXMycmFkaWFucygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgZGVncmVlc1RvUmFkaWFuc2BcIik7XG59XG5leHBvcnRzLmRlZ3JlZXMycmFkaWFucyA9IGRlZ3JlZXMycmFkaWFucztcbmZ1bmN0aW9uIGRpc3RhbmNlVG9EZWdyZWVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBsZW5ndGhUb0RlZ3JlZXNgXCIpO1xufVxuZXhwb3J0cy5kaXN0YW5jZVRvRGVncmVlcyA9IGRpc3RhbmNlVG9EZWdyZWVzO1xuZnVuY3Rpb24gZGlzdGFuY2VUb1JhZGlhbnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGxlbmd0aFRvUmFkaWFuc2BcIik7XG59XG5leHBvcnRzLmRpc3RhbmNlVG9SYWRpYW5zID0gZGlzdGFuY2VUb1JhZGlhbnM7XG5mdW5jdGlvbiByYWRpYW5zVG9EaXN0YW5jZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvTGVuZ3RoYFwiKTtcbn1cbmV4cG9ydHMucmFkaWFuc1RvRGlzdGFuY2UgPSByYWRpYW5zVG9EaXN0YW5jZTtcbmZ1bmN0aW9uIGJlYXJpbmdUb0FuZ2xlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBiZWFyaW5nVG9BemltdXRoYFwiKTtcbn1cbmV4cG9ydHMuYmVhcmluZ1RvQW5nbGUgPSBiZWFyaW5nVG9BbmdsZTtcbmZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgY29udmVydExlbmd0aGBcIik7XG59XG5leHBvcnRzLmNvbnZlcnREaXN0YW5jZSA9IGNvbnZlcnREaXN0YW5jZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIGhlbHBlcnMgPSByZXF1aXJlKCdAdHVyZi9oZWxwZXJzJyk7XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGNvb3JkRWFjaFxuICpcbiAqIEBjYWxsYmFjayBjb29yZEVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjdXJyZW50Q29vcmQgVGhlIGN1cnJlbnQgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29vcmRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGNvb3JkaW5hdGVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBjb29yZEVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4Y2x1ZGVXcmFwQ29vcmQ9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIGZpbmFsIGNvb3JkaW5hdGUgb2YgTGluZWFyUmluZ3MgdGhhdCB3cmFwcyB0aGUgcmluZyBpbiBpdHMgaXRlcmF0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmNvb3JkRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1jdXJyZW50Q29vcmRcbiAqICAgLy89Y29vcmRJbmRleFxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGNvb3JkRWFjaChnZW9qc29uLCBjYWxsYmFjaywgZXhjbHVkZVdyYXBDb29yZCkge1xuICAgIC8vIEhhbmRsZXMgbnVsbCBHZW9tZXRyeSAtLSBTa2lwcyB0aGlzIEdlb0pTT05cbiAgICBpZiAoZ2VvanNvbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHZhciBqLCBrLCBsLCBnZW9tZXRyeSwgc3RvcEcsIGNvb3JkcyxcbiAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24sXG4gICAgICAgIHdyYXBTaHJpbmsgPSAwLFxuICAgICAgICBjb29yZEluZGV4ID0gMCxcbiAgICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24sXG4gICAgICAgIHR5cGUgPSBnZW9qc29uLnR5cGUsXG4gICAgICAgIGlzRmVhdHVyZUNvbGxlY3Rpb24gPSB0eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICBpc0ZlYXR1cmUgPSB0eXBlID09PSAnRmVhdHVyZScsXG4gICAgICAgIHN0b3AgPSBpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggOiAxO1xuXG4gICAgLy8gVGhpcyBsb2dpYyBtYXkgbG9vayBhIGxpdHRsZSB3ZWlyZC4gVGhlIHJlYXNvbiB3aHkgaXQgaXMgdGhhdCB3YXlcbiAgICAvLyBpcyBiZWNhdXNlIGl0J3MgdHJ5aW5nIHRvIGJlIGZhc3QuIEdlb0pTT04gc3VwcG9ydHMgbXVsdGlwbGUga2luZHNcbiAgICAvLyBvZiBvYmplY3RzIGF0IGl0cyByb290OiBGZWF0dXJlQ29sbGVjdGlvbiwgRmVhdHVyZXMsIEdlb21ldHJpZXMuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGhhbmRsaW5nIGFsbCBvZiB0aGVtLCBhbmQgdGhhdFxuICAgIC8vIG1lYW5zIHRoYXQgc29tZSBvZiB0aGUgYGZvcmAgbG9vcHMgeW91IHNlZSBiZWxvdyBhY3R1YWxseSBqdXN0IGRvbid0IGFwcGx5XG4gICAgLy8gdG8gY2VydGFpbiBpbnB1dHMuIEZvciBpbnN0YW5jZSwgaWYgeW91IGdpdmUgdGhpcyBqdXN0IGFcbiAgICAvLyBQb2ludCBnZW9tZXRyeSwgdGhlbiBib3RoIGxvb3BzIGFyZSBzaG9ydC1jaXJjdWl0ZWQgYW5kIGFsbCB3ZSBkb1xuICAgIC8vIGlzIGdyYWR1YWxseSByZW5hbWUgdGhlIGlucHV0IHVudGlsIGl0J3MgY2FsbGVkICdnZW9tZXRyeScuXG4gICAgLy9cbiAgICAvLyBUaGlzIGFsc28gYWltcyB0byBhbGxvY2F0ZSBhcyBmZXcgcmVzb3VyY2VzIGFzIHBvc3NpYmxlOiBqdXN0IGFcbiAgICAvLyBmZXcgbnVtYmVycyBhbmQgYm9vbGVhbnMsIHJhdGhlciB0aGFuIGFueSB0ZW1wb3JhcnkgYXJyYXlzIGFzIHdvdWxkXG4gICAgLy8gYmUgcmVxdWlyZWQgd2l0aCB0aGUgbm9ybWFsaXphdGlvbiBhcHByb2FjaC5cbiAgICBmb3IgKHZhciBmZWF0dXJlSW5kZXggPSAwOyBmZWF0dXJlSW5kZXggPCBzdG9wOyBmZWF0dXJlSW5kZXgrKykge1xuICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbiA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLmdlb21ldHJ5IDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLmdlb21ldHJ5IDogZ2VvanNvbikpO1xuICAgICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbiA9IChnZW9tZXRyeU1heWJlQ29sbGVjdGlvbikgPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi50eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJyA6IGZhbHNlO1xuICAgICAgICBzdG9wRyA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllcy5sZW5ndGggOiAxO1xuXG4gICAgICAgIGZvciAodmFyIGdlb21JbmRleCA9IDA7IGdlb21JbmRleCA8IHN0b3BHOyBnZW9tSW5kZXgrKykge1xuICAgICAgICAgICAgdmFyIG11bHRpRmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeUluZGV4ID0gMDtcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gP1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXNbZ2VvbUluZGV4XSA6IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGVzIG51bGwgR2VvbWV0cnkgLS0gU2tpcHMgdGhpcyBnZW9tZXRyeVxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvb3JkcyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgICAgICAgdmFyIGdlb21UeXBlID0gZ2VvbWV0cnkudHlwZTtcblxuICAgICAgICAgICAgd3JhcFNocmluayA9IChleGNsdWRlV3JhcENvb3JkICYmIChnZW9tVHlwZSA9PT0gJ1BvbHlnb24nIHx8IGdlb21UeXBlID09PSAnTXVsdGlQb2x5Z29uJykpID8gMSA6IDA7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2VvbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICAgICAgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzW2pdLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdNdWx0aVBvaW50JykgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnTGluZVN0cmluZycpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY29vcmRzW2pdLmxlbmd0aCAtIHdyYXBTaHJpbms7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXVtrXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnUG9seWdvbicpIGdlb21ldHJ5SW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnUG9seWdvbicpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnlJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb29yZHNbal0ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IDA7IGwgPCBjb29yZHNbal1ba10ubGVuZ3RoIC0gd3JhcFNocmluazsgbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXVtrXVtsXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnlJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvb3JkRWFjaChnZW9tZXRyeS5nZW9tZXRyaWVzW2pdLCBjYWxsYmFjaywgZXhjbHVkZVdyYXBDb29yZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBHZW9tZXRyeSBUeXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGNvb3JkUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgY29vcmRSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY3VycmVudENvb3JkIFRoZSBjdXJyZW50IGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvb3JkSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogU3RhcnRzIGF0IGluZGV4IDAsIGlmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCwgYW5kIGF0IGluZGV4IDEgb3RoZXJ3aXNlLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBjb29yZGluYXRlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKClcbiAqXG4gKiBAbmFtZSBjb29yZFJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxHZW9tZXRyeXxGZWF0dXJlfSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudENvb3JkLCBjb29yZEluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4Y2x1ZGVXcmFwQ29vcmQ9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIGZpbmFsIGNvb3JkaW5hdGUgb2YgTGluZWFyUmluZ3MgdGhhdCB3cmFwcyB0aGUgcmluZyBpbiBpdHMgaXRlcmF0aW9uLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7XCJmb29cIjogXCJiYXJcIn0pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7XCJoZWxsb1wiOiBcIndvcmxkXCJ9KVxuICogXSk7XG4gKlxuICogdHVyZi5jb29yZFJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRDb29yZFxuICogICAvLz1jb29yZEluZGV4XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50Q29vcmQ7XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gY29vcmRSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSwgZXhjbHVkZVdyYXBDb29yZCkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGNvb3JkRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gICAgICAgIGlmIChjb29yZEluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudENvb3JkO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpO1xuICAgIH0sIGV4Y2x1ZGVXcmFwQ29vcmQpO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBwcm9wRWFjaFxuICpcbiAqIEBjYWxsYmFjayBwcm9wRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge09iamVjdH0gY3VycmVudFByb3BlcnRpZXMgVGhlIGN1cnJlbnQgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBwcm9wZXJ0aWVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBwcm9wRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYucHJvcEVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIHByb3BFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgdmFyIGk7XG4gICAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLCBpKSA9PT0gZmFsc2UpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0ZlYXR1cmUnOlxuICAgICAgICBjYWxsYmFjayhnZW9qc29uLnByb3BlcnRpZXMsIDApO1xuICAgICAgICBicmVhaztcbiAgICB9XG59XG5cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgcHJvcFJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIHByb3BSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7Kn0gY3VycmVudFByb3BlcnRpZXMgVGhlIGN1cnJlbnQgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBwcm9wZXJ0aWVzIGluIGFueSBHZW9KU09OIG9iamVjdCBpbnRvIGEgc2luZ2xlIHZhbHVlLFxuICogc2ltaWxhciB0byBob3cgQXJyYXkucmVkdWNlIHdvcmtzLiBIb3dldmVyLCBpbiB0aGlzIGNhc2Ugd2UgbGF6aWx5IHJ1blxuICogdGhlIHJlZHVjdGlvbiwgc28gYW4gYXJyYXkgb2YgYWxsIHByb3BlcnRpZXMgaXMgdW5uZWNlc3NhcnkuXG4gKlxuICogQG5hbWUgcHJvcFJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5wcm9wUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICByZXR1cm4gY3VycmVudFByb3BlcnRpZXNcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBwcm9wUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBwcm9wRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudFByb3BlcnRpZXM7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBmZWF0dXJlRWFjaFxuICpcbiAqIEBjYWxsYmFjayBmZWF0dXJlRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8YW55Pn0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG9cbiAqIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgZmVhdHVyZUVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmVhdHVyZUVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgaWYgKGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIGNhbGxiYWNrKGdlb2pzb24sIDApO1xuICAgIH0gZWxzZSBpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb2pzb24uZmVhdHVyZXNbaV0sIGkpID09PSBmYWxzZSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZlYXR1cmVSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBmZWF0dXJlUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGZlYXR1cmVSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7XCJmb29cIjogXCJiYXJcIn0pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7XCJoZWxsb1wiOiBcIndvcmxkXCJ9KVxuICogXSk7XG4gKlxuICogdHVyZi5mZWF0dXJlUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICByZXR1cm4gY3VycmVudEZlYXR1cmVcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBmZWF0dXJlUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBmZWF0dXJlRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudEZlYXR1cmU7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIEdldCBhbGwgY29vcmRpbmF0ZXMgZnJvbSBhbnkgR2VvSlNPTiBvYmplY3QuXG4gKlxuICogQG5hbWUgY29vcmRBbGxcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZSBwb3NpdGlvbiBhcnJheVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdmFyIGNvb3JkcyA9IHR1cmYuY29vcmRBbGwoZmVhdHVyZXMpO1xuICogLy89IFtbMjYsIDM3XSwgWzM2LCA1M11dXG4gKi9cbmZ1bmN0aW9uIGNvb3JkQWxsKGdlb2pzb24pIHtcbiAgICB2YXIgY29vcmRzID0gW107XG4gICAgY29vcmRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjb29yZCkge1xuICAgICAgICBjb29yZHMucHVzaChjb29yZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZ2VvbUVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgZ2VvbUVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtHZW9tZXRyeX0gY3VycmVudEdlb21ldHJ5IFRoZSBjdXJyZW50IEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmVQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IEZlYXR1cmUgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGZlYXR1cmVCQm94IFRoZSBjdXJyZW50IEZlYXR1cmUgQkJveCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGZlYXR1cmVJZCBUaGUgY3VycmVudCBGZWF0dXJlIElkIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIGdlb21ldHJ5IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBnZW9tRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5nZW9tRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkge1xuICogICAvLz1jdXJyZW50R2VvbWV0cnlcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPWZlYXR1cmVQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVCQm94XG4gKiAgIC8vPWZlYXR1cmVJZFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGdlb21FYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgdmFyIGksIGosIGcsIGdlb21ldHJ5LCBzdG9wRyxcbiAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24sXG4gICAgICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uLFxuICAgICAgICBmZWF0dXJlUHJvcGVydGllcyxcbiAgICAgICAgZmVhdHVyZUJCb3gsXG4gICAgICAgIGZlYXR1cmVJZCxcbiAgICAgICAgZmVhdHVyZUluZGV4ID0gMCxcbiAgICAgICAgaXNGZWF0dXJlQ29sbGVjdGlvbiA9IGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgaXNGZWF0dXJlID0gZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScsXG4gICAgICAgIHN0b3AgPSBpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggOiAxO1xuXG4gICAgLy8gVGhpcyBsb2dpYyBtYXkgbG9vayBhIGxpdHRsZSB3ZWlyZC4gVGhlIHJlYXNvbiB3aHkgaXQgaXMgdGhhdCB3YXlcbiAgICAvLyBpcyBiZWNhdXNlIGl0J3MgdHJ5aW5nIHRvIGJlIGZhc3QuIEdlb0pTT04gc3VwcG9ydHMgbXVsdGlwbGUga2luZHNcbiAgICAvLyBvZiBvYmplY3RzIGF0IGl0cyByb290OiBGZWF0dXJlQ29sbGVjdGlvbiwgRmVhdHVyZXMsIEdlb21ldHJpZXMuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGhhbmRsaW5nIGFsbCBvZiB0aGVtLCBhbmQgdGhhdFxuICAgIC8vIG1lYW5zIHRoYXQgc29tZSBvZiB0aGUgYGZvcmAgbG9vcHMgeW91IHNlZSBiZWxvdyBhY3R1YWxseSBqdXN0IGRvbid0IGFwcGx5XG4gICAgLy8gdG8gY2VydGFpbiBpbnB1dHMuIEZvciBpbnN0YW5jZSwgaWYgeW91IGdpdmUgdGhpcyBqdXN0IGFcbiAgICAvLyBQb2ludCBnZW9tZXRyeSwgdGhlbiBib3RoIGxvb3BzIGFyZSBzaG9ydC1jaXJjdWl0ZWQgYW5kIGFsbCB3ZSBkb1xuICAgIC8vIGlzIGdyYWR1YWxseSByZW5hbWUgdGhlIGlucHV0IHVudGlsIGl0J3MgY2FsbGVkICdnZW9tZXRyeScuXG4gICAgLy9cbiAgICAvLyBUaGlzIGFsc28gYWltcyB0byBhbGxvY2F0ZSBhcyBmZXcgcmVzb3VyY2VzIGFzIHBvc3NpYmxlOiBqdXN0IGFcbiAgICAvLyBmZXcgbnVtYmVycyBhbmQgYm9vbGVhbnMsIHJhdGhlciB0aGFuIGFueSB0ZW1wb3JhcnkgYXJyYXlzIGFzIHdvdWxkXG4gICAgLy8gYmUgcmVxdWlyZWQgd2l0aCB0aGUgbm9ybWFsaXphdGlvbiBhcHByb2FjaC5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RvcDsgaSsrKSB7XG5cbiAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24gPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0uZ2VvbWV0cnkgOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24uZ2VvbWV0cnkgOiBnZW9qc29uKSk7XG4gICAgICAgIGZlYXR1cmVQcm9wZXJ0aWVzID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMgOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24ucHJvcGVydGllcyA6IHt9KSk7XG4gICAgICAgIGZlYXR1cmVCQm94ID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmJib3ggOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24uYmJveCA6IHVuZGVmaW5lZCkpO1xuICAgICAgICBmZWF0dXJlSWQgPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0uaWQgOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24uaWQgOiB1bmRlZmluZWQpKTtcbiAgICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24gPSAoZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24pID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24udHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicgOiBmYWxzZTtcbiAgICAgICAgc3RvcEcgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXMubGVuZ3RoIDogMTtcblxuICAgICAgICBmb3IgKGcgPSAwOyBnIDwgc3RvcEc7IGcrKykge1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllc1tnXSA6IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgbnVsbCBHZW9tZXRyeVxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKG51bGwsIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzoge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhnZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdHZW9tZXRyeUNvbGxlY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb21ldHJ5Lmdlb21ldHJpZXNbal0sIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIEdlb21ldHJ5IFR5cGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGluY3JlYXNlIGBmZWF0dXJlSW5kZXhgIHBlciBlYWNoIGZlYXR1cmVcbiAgICAgICAgZmVhdHVyZUluZGV4Kys7XG4gICAgfVxufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBnZW9tUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgZ2VvbVJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtHZW9tZXRyeX0gY3VycmVudEdlb21ldHJ5IFRoZSBjdXJyZW50IEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmVQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IEZlYXR1cmUgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGZlYXR1cmVCQm94IFRoZSBjdXJyZW50IEZlYXR1cmUgQkJveCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGZlYXR1cmVJZCBUaGUgY3VycmVudCBGZWF0dXJlIElkIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBnZW9tZXRyeSBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgZ2VvbVJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmdlb21SZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50R2VvbWV0cnlcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPWZlYXR1cmVQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVCQm94XG4gKiAgIC8vPWZlYXR1cmVJZFxuICogICByZXR1cm4gY3VycmVudEdlb21ldHJ5XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZ2VvbVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgZ2VvbUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudEdlb21ldHJ5O1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBmbGF0dGVuRWFjaFxuICpcbiAqIEBjYWxsYmFjayBmbGF0dGVuRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IGZsYXR0ZW5lZCBmZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBmbGF0dGVuZWQgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvXG4gKiBBcnJheS5mb3JFYWNoLlxuICpcbiAqIEBuYW1lIGZsYXR0ZW5FYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYubXVsdGlQb2ludChbWzQwLCAzMF0sIFszNiwgNTNdXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmxhdHRlbkVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBmbGF0dGVuRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIGdlb21FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChnZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBwcm9wZXJ0aWVzLCBiYm94LCBpZCkge1xuICAgICAgICAvLyBDYWxsYmFjayBmb3Igc2luZ2xlIGdlb21ldHJ5XG4gICAgICAgIHZhciB0eXBlID0gKGdlb21ldHJ5ID09PSBudWxsKSA/IG51bGwgOiBnZW9tZXRyeS50eXBlO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhoZWxwZXJzLmZlYXR1cmUoZ2VvbWV0cnksIHByb3BlcnRpZXMsIHtiYm94OiBiYm94LCBpZDogaWR9KSwgZmVhdHVyZUluZGV4LCAwKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBnZW9tVHlwZTtcblxuICAgICAgICAvLyBDYWxsYmFjayBmb3IgbXVsdGktZ2VvbWV0cnlcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICAgICAgZ2VvbVR5cGUgPSAnUG9pbnQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgICAgICBnZW9tVHlwZSA9ICdMaW5lU3RyaW5nJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICAgICAgZ2VvbVR5cGUgPSAnUG9seWdvbic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIG11bHRpRmVhdHVyZUluZGV4ID0gMDsgbXVsdGlGZWF0dXJlSW5kZXggPCBnZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IG11bHRpRmVhdHVyZUluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBjb29yZGluYXRlID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXNbbXVsdGlGZWF0dXJlSW5kZXhdO1xuICAgICAgICAgICAgdmFyIGdlb20gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogZ2VvbVR5cGUsXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soaGVscGVycy5mZWF0dXJlKGdlb20sIHByb3BlcnRpZXMpLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBmbGF0dGVuUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgZmxhdHRlblJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlfSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBmbGF0dGVuZWQgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGZsYXR0ZW5SZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYubXVsdGlQb2ludChbWzQwLCAzMF0sIFszNiwgNTNdXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmxhdHRlblJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50RmVhdHVyZVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5SZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIG11bHRpRmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudEZlYXR1cmU7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3Igc2VnbWVudEVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgc2VnbWVudEVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50U2VnbWVudCBUaGUgY3VycmVudCBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gc2VnbWVudEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIDItdmVydGV4IGxpbmUgc2VnbWVudCBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKiAoTXVsdGkpUG9pbnQgZ2VvbWV0cmllcyBkbyBub3QgY29udGFpbiBzZWdtZW50cyB0aGVyZWZvcmUgdGhleSBhcmUgaWdub3JlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUwLCA1XSwgWy00MCwgLTEwXSwgWy01MCwgLTEwXSwgWy00MCwgNV0sIFstNTAsIDVdXV0pO1xuICpcbiAqIC8vIEl0ZXJhdGUgb3ZlciBHZW9KU09OIGJ5IDItdmVydGV4IHNlZ21lbnRzXG4gKiB0dXJmLnNlZ21lbnRFYWNoKHBvbHlnb24sIGZ1bmN0aW9uIChjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRTZWdtZW50XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiAgIC8vPXNlZ21lbnRJbmRleFxuICogfSk7XG4gKlxuICogLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHNcbiAqIHZhciB0b3RhbCA9IDA7XG4gKiB0dXJmLnNlZ21lbnRFYWNoKHBvbHlnb24sIGZ1bmN0aW9uICgpIHtcbiAqICAgICB0b3RhbCsrO1xuICogfSk7XG4gKi9cbmZ1bmN0aW9uIHNlZ21lbnRFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgZmxhdHRlbkVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgdmFyIHNlZ21lbnRJbmRleCA9IDA7XG5cbiAgICAgICAgLy8gRXhjbHVkZSBudWxsIEdlb21ldHJpZXNcbiAgICAgICAgaWYgKCFmZWF0dXJlLmdlb21ldHJ5KSByZXR1cm47XG4gICAgICAgIC8vIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAgICAgICAgdmFyIHR5cGUgPSBmZWF0dXJlLmdlb21ldHJ5LnR5cGU7XG4gICAgICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50JykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIDItdmVydGV4IGxpbmUgc2VnbWVudHNcbiAgICAgICAgdmFyIHByZXZpb3VzQ29vcmRzO1xuICAgICAgICB2YXIgcHJldmlvdXNGZWF0dXJlSW5kZXggPSAwO1xuICAgICAgICB2YXIgcHJldmlvdXNNdWx0aUluZGV4ID0gMDtcbiAgICAgICAgdmFyIHByZXZHZW9tSW5kZXggPSAwO1xuICAgICAgICBpZiAoY29vcmRFYWNoKGZlYXR1cmUsIGZ1bmN0aW9uIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleENvb3JkLCBtdWx0aVBhcnRJbmRleENvb3JkLCBnZW9tZXRyeUluZGV4KSB7XG4gICAgICAgICAgICAvLyBTaW11bGF0aW5nIGEgbWV0YS5jb29yZFJlZHVjZSgpIHNpbmNlIGByZWR1Y2VgIG9wZXJhdGlvbnMgY2Fubm90IGJlIHN0b3BwZWQgYnkgcmV0dXJuaW5nIGBmYWxzZWBcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0Nvb3JkcyA9PT0gdW5kZWZpbmVkIHx8IGZlYXR1cmVJbmRleCA+IHByZXZpb3VzRmVhdHVyZUluZGV4IHx8IG11bHRpUGFydEluZGV4Q29vcmQgPiBwcmV2aW91c011bHRpSW5kZXggfHwgZ2VvbWV0cnlJbmRleCA+IHByZXZHZW9tSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0Nvb3JkcyA9IGN1cnJlbnRDb29yZDtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0ZlYXR1cmVJbmRleCA9IGZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgICAgICBwcmV2aW91c011bHRpSW5kZXggPSBtdWx0aVBhcnRJbmRleENvb3JkO1xuICAgICAgICAgICAgICAgIHByZXZHZW9tSW5kZXggPSBnZW9tZXRyeUluZGV4O1xuICAgICAgICAgICAgICAgIHNlZ21lbnRJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGN1cnJlbnRTZWdtZW50ID0gaGVscGVycy5saW5lU3RyaW5nKFtwcmV2aW91c0Nvb3JkcywgY3VycmVudENvb3JkXSwgZmVhdHVyZS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHNlZ21lbnRJbmRleCsrO1xuICAgICAgICAgICAgcHJldmlvdXNDb29yZHMgPSBjdXJyZW50Q29vcmQ7XG4gICAgICAgIH0pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBzZWdtZW50UmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgc2VnbWVudFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50U2VnbWVudCBUaGUgY3VycmVudCBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gc2VnbWVudEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSAyLXZlcnRleCBsaW5lIHNlZ21lbnQgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpXG4gKiAoTXVsdGkpUG9pbnQgZ2VvbWV0cmllcyBkbyBub3QgY29udGFpbiBzZWdtZW50cyB0aGVyZWZvcmUgdGhleSBhcmUgaWdub3JlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50U2VnbWVudCwgY3VycmVudEluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWy01MCwgNV0sIFstNDAsIC0xMF0sIFstNTAsIC0xMF0sIFstNDAsIDVdLCBbLTUwLCA1XV1dKTtcbiAqXG4gKiAvLyBJdGVyYXRlIG92ZXIgR2VvSlNPTiBieSAyLXZlcnRleCBzZWdtZW50c1xuICogdHVyZi5zZWdtZW50UmVkdWNlKHBvbHlnb24sIGZ1bmN0aW9uIChwcmV2aW91c1NlZ21lbnQsIGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAqICAgLy89IHByZXZpb3VzU2VnbWVudFxuICogICAvLz0gY3VycmVudFNlZ21lbnRcbiAqICAgLy89IGZlYXR1cmVJbmRleFxuICogICAvLz0gbXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89IGdlb21ldHJ5SW5kZXhcbiAqICAgLy89IHNlZ21lbnRJbmV4XG4gKiAgIHJldHVybiBjdXJyZW50U2VnbWVudFxuICogfSk7XG4gKlxuICogLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHNcbiAqIHZhciBpbml0aWFsVmFsdWUgPSAwXG4gKiB2YXIgdG90YWwgPSB0dXJmLnNlZ21lbnRSZWR1Y2UocG9seWdvbiwgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUpIHtcbiAqICAgICBwcmV2aW91c1ZhbHVlKys7XG4gKiAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG4gKiB9LCBpbml0aWFsVmFsdWUpO1xuICovXG5mdW5jdGlvbiBzZWdtZW50UmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICB2YXIgc3RhcnRlZCA9IGZhbHNlO1xuICAgIHNlZ21lbnRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSB7XG4gICAgICAgIGlmIChzdGFydGVkID09PSBmYWxzZSAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRTZWdtZW50O1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KTtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGxpbmVFYWNoXG4gKlxuICogQGNhbGxiYWNrIGxpbmVFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudExpbmUgVGhlIGN1cnJlbnQgTGluZVN0cmluZ3xMaW5lYXJSaW5nIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWRcbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBsaW5lIG9yIHJpbmcgY29vcmRpbmF0ZXMgaW4gTGluZVN0cmluZywgUG9seWdvbiwgTXVsdGlMaW5lU3RyaW5nLCBNdWx0aVBvbHlnb24gRmVhdHVyZXMgb3IgR2VvbWV0cmllcyxcbiAqIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaC5cbiAqXG4gKiBAbmFtZSBsaW5lRWFjaFxuICogQHBhcmFtIHtHZW9tZXRyeXxGZWF0dXJlPExpbmVTdHJpbmd8UG9seWdvbnxNdWx0aUxpbmVTdHJpbmd8TXVsdGlQb2x5Z29uPn0gZ2VvanNvbiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KVxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbXG4gKiAgIFtbMjYsIDM3XSwgWzM1LCA0NV1dLFxuICogICBbWzM2LCA1M10sIFszOCwgNTBdLCBbNDEsIDU1XV1cbiAqIF0pO1xuICpcbiAqIHR1cmYubGluZUVhY2gobXVsdGlMaW5lLCBmdW5jdGlvbiAoY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89Y3VycmVudExpbmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBsaW5lRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIC8vIHZhbGlkYXRpb25cbiAgICBpZiAoIWdlb2pzb24pIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyByZXF1aXJlZCcpO1xuXG4gICAgZmxhdHRlbkVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmUuZ2VvbWV0cnkgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgdmFyIHR5cGUgPSBmZWF0dXJlLmdlb21ldHJ5LnR5cGU7XG4gICAgICAgIHZhciBjb29yZHMgPSBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgMCwgMCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBmb3IgKHZhciBnZW9tZXRyeUluZGV4ID0gMDsgZ2VvbWV0cnlJbmRleCA8IGNvb3Jkcy5sZW5ndGg7IGdlb21ldHJ5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhoZWxwZXJzLmxpbmVTdHJpbmcoY29vcmRzW2dlb21ldHJ5SW5kZXhdLCBmZWF0dXJlLnByb3BlcnRpZXMpLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGxpbmVSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBsaW5lUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRMaW5lIFRoZSBjdXJyZW50IExpbmVTdHJpbmd8TGluZWFyUmluZyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZFxuICovXG5cbi8qKlxuICogUmVkdWNlIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBsaW5lUmVkdWNlXG4gKiBAcGFyYW0ge0dlb21ldHJ5fEZlYXR1cmU8TGluZVN0cmluZ3xQb2x5Z29ufE11bHRpTGluZVN0cmluZ3xNdWx0aVBvbHlnb24+fSBnZW9qc29uIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVBvbHkgPSB0dXJmLm11bHRpUG9seWdvbihbXG4gKiAgIHR1cmYucG9seWdvbihbW1sxMiw0OF0sWzIsNDFdLFsyNCwzOF0sWzEyLDQ4XV0sIFtbOSw0NF0sWzEzLDQxXSxbMTMsNDVdLFs5LDQ0XV1dKSxcbiAqICAgdHVyZi5wb2x5Z29uKFtbWzUsIDVdLCBbMCwgMF0sIFsyLCAyXSwgWzQsIDRdLCBbNSwgNV1dXSlcbiAqIF0pO1xuICpcbiAqIHR1cmYubGluZVJlZHVjZShtdWx0aVBvbHksIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRMaW5lXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50TGluZVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGxpbmVSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGxpbmVFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudExpbmU7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIHBhcnRpY3VsYXIgMi12ZXJ0ZXggTGluZVN0cmluZyBTZWdtZW50IGZyb20gYSBHZW9KU09OIHVzaW5nIGBAdHVyZi9tZXRhYCBpbmRleGVzLlxuICpcbiAqIE5lZ2F0aXZlIGluZGV4ZXMgYXJlIHBlcm1pdHRlZC5cbiAqIFBvaW50ICYgTXVsdGlQb2ludCB3aWxsIGFsd2F5cyByZXR1cm4gbnVsbC5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gQW55IEdlb0pTT04gRmVhdHVyZSBvciBHZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZmVhdHVyZUluZGV4PTBdIEZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleD0wXSBNdWx0aS1GZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ2VvbWV0cnlJbmRleD0wXSBHZW9tZXRyeSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNlZ21lbnRJbmRleD0wXSBTZWdtZW50IEluZGV4XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucHJvcGVydGllcz17fV0gVHJhbnNsYXRlIFByb3BlcnRpZXMgdG8gb3V0cHV0IExpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QkJveH0gW29wdGlvbnMuYmJveD17fV0gVHJhbnNsYXRlIEJCb3ggdG8gb3V0cHV0IExpbmVTdHJpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdGlvbnMuaWQ9e31dIFRyYW5zbGF0ZSBJZCB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHJldHVybnMge0ZlYXR1cmU8TGluZVN0cmluZz59IDItdmVydGV4IEdlb0pTT04gRmVhdHVyZSBMaW5lU3RyaW5nXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgICBbWzEwLCAxMF0sIFs1MCwgMzBdLCBbMzAsIDQwXV0sXG4gKiAgICAgW1stMTAsIC0xMF0sIFstNTAsIC0zMF0sIFstMzAsIC00MF1dXG4gKiBdKTtcbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IChkZWZhdWx0cyBhcmUgMClcbiAqIHR1cmYuZmluZFNlZ21lbnQobXVsdGlMaW5lKTtcbiAqIC8vID0+IEZlYXR1cmU8TGluZVN0cmluZzxbWzEwLCAxMF0sIFs1MCwgMzBdXT4+XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCBvZiAybmQgTXVsdGkgRmVhdHVyZVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogMX0pO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbLTEwLCAtMTBdLCBbLTUwLCAtMzBdXT4+XG4gKlxuICogLy8gTGFzdCBTZWdtZW50IG9mIExhc3QgTXVsdGkgRmVhdHVyZVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogLTEsIHNlZ21lbnRJbmRleDogLTF9KTtcbiAqIC8vID0+IEZlYXR1cmU8TGluZVN0cmluZzxbWy01MCwgLTMwXSwgWy0zMCwgLTQwXV0+PlxuICovXG5mdW5jdGlvbiBmaW5kU2VnbWVudChnZW9qc29uLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaGVscGVycy5pc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgZmVhdHVyZUluZGV4ID0gb3B0aW9ucy5mZWF0dXJlSW5kZXggfHwgMDtcbiAgICB2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSBvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4IHx8IDA7XG4gICAgdmFyIGdlb21ldHJ5SW5kZXggPSBvcHRpb25zLmdlb21ldHJ5SW5kZXggfHwgMDtcbiAgICB2YXIgc2VnbWVudEluZGV4ID0gb3B0aW9ucy5zZWdtZW50SW5kZXggfHwgMDtcblxuICAgIC8vIEZpbmQgRmVhdHVyZUluZGV4XG4gICAgdmFyIHByb3BlcnRpZXMgPSBvcHRpb25zLnByb3BlcnRpZXM7XG4gICAgdmFyIGdlb21ldHJ5O1xuXG4gICAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPCAwKSBmZWF0dXJlSW5kZXggPSBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCArIGZlYXR1cmVJbmRleDtcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLmdlb21ldHJ5O1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwgZ2VvanNvbi5wcm9wZXJ0aWVzO1xuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZ2VvbWV0cnk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb247XG4gICAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBTZWdtZW50SW5kZXhcbiAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHZhciBjb29yZHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICBzd2l0Y2ggKGdlb21ldHJ5LnR5cGUpIHtcbiAgICBjYXNlICdQb2ludCc6XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzLmxlbmd0aCArIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLmxpbmVTdHJpbmcoW2Nvb3Jkc1tzZWdtZW50SW5kZXhdLCBjb29yZHNbc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbZ2VvbWV0cnlJbmRleF0ubGVuZ3RoICsgc2VnbWVudEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMubGluZVN0cmluZyhbY29vcmRzW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1tnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gaGVscGVycy5saW5lU3RyaW5nKFtjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XS5sZW5ndGggLSBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gaGVscGVycy5saW5lU3RyaW5nKFtjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIGludmFsaWQnKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIHBhcnRpY3VsYXIgUG9pbnQgZnJvbSBhIEdlb0pTT04gdXNpbmcgYEB0dXJmL21ldGFgIGluZGV4ZXMuXG4gKlxuICogTmVnYXRpdmUgaW5kZXhlcyBhcmUgcGVybWl0dGVkLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBBbnkgR2VvSlNPTiBGZWF0dXJlIG9yIEdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mZWF0dXJlSW5kZXg9MF0gRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4PTBdIE11bHRpLUZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5nZW9tZXRyeUluZGV4PTBdIEdlb21ldHJ5IEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY29vcmRJbmRleD0wXSBDb29yZCBJbmRleFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnByb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSBQcm9wZXJ0aWVzIHRvIG91dHB1dCBQb2ludFxuICogQHBhcmFtIHtCQm94fSBbb3B0aW9ucy5iYm94PXt9XSBUcmFuc2xhdGUgQkJveCB0byBvdXRwdXQgUG9pbnRcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdGlvbnMuaWQ9e31dIFRyYW5zbGF0ZSBJZCB0byBvdXRwdXQgUG9pbnRcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvaW50Pn0gMi12ZXJ0ZXggR2VvSlNPTiBGZWF0dXJlIFBvaW50XG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgICBbWzEwLCAxMF0sIFs1MCwgMzBdLCBbMzAsIDQwXV0sXG4gKiAgICAgW1stMTAsIC0xMF0sIFstNTAsIC0zMF0sIFstMzAsIC00MF1dXG4gKiBdKTtcbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IChkZWZhdWx0cyBhcmUgMClcbiAqIHR1cmYuZmluZFBvaW50KG11bHRpTGluZSk7XG4gKiAvLyA9PiBGZWF0dXJlPFBvaW50PFsxMCwgMTBdPj5cbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IG9mIHRoZSAybmQgTXVsdGktRmVhdHVyZVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IDF9KTtcbiAqIC8vID0+IEZlYXR1cmU8UG9pbnQ8Wy0xMCwgLTEwXT4+XG4gKlxuICogLy8gTGFzdCBTZWdtZW50IG9mIGxhc3QgTXVsdGktRmVhdHVyZVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IC0xLCBjb29yZEluZGV4OiAtMX0pO1xuICogLy8gPT4gRmVhdHVyZTxQb2ludDxbLTMwLCAtNDBdPj5cbiAqL1xuZnVuY3Rpb24gZmluZFBvaW50KGdlb2pzb24sIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFoZWxwZXJzLmlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBmZWF0dXJlSW5kZXggPSBvcHRpb25zLmZlYXR1cmVJbmRleCB8fCAwO1xuICAgIHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IG9wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXggfHwgMDtcbiAgICB2YXIgZ2VvbWV0cnlJbmRleCA9IG9wdGlvbnMuZ2VvbWV0cnlJbmRleCB8fCAwO1xuICAgIHZhciBjb29yZEluZGV4ID0gb3B0aW9ucy5jb29yZEluZGV4IHx8IDA7XG5cbiAgICAvLyBGaW5kIEZlYXR1cmVJbmRleFxuICAgIHZhciBwcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICAgIHZhciBnZW9tZXRyeTtcblxuICAgIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSAnRmVhdHVyZUNvbGxlY3Rpb24nOlxuICAgICAgICBpZiAoZmVhdHVyZUluZGV4IDwgMCkgZmVhdHVyZUluZGV4ID0gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggKyBmZWF0dXJlSW5kZXg7XG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5wcm9wZXJ0aWVzO1xuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5nZW9tZXRyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24ucHJvcGVydGllcztcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmdlb21ldHJ5O1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdQb2ludCc6XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgQ29vcmQgSW5kZXhcbiAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHZhciBjb29yZHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICBzd2l0Y2ggKGdlb21ldHJ5LnR5cGUpIHtcbiAgICBjYXNlICdQb2ludCc6XG4gICAgICAgIHJldHVybiBoZWxwZXJzLnBvaW50KGNvb3JkcywgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICByZXR1cm4gaGVscGVycy5wb2ludChjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzLmxlbmd0aCArIGNvb3JkSW5kZXg7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLnBvaW50KGNvb3Jkc1tjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbZ2VvbWV0cnlJbmRleF0ubGVuZ3RoICsgY29vcmRJbmRleDtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMucG9pbnQoY29vcmRzW2dlb21ldHJ5SW5kZXhdW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBjb29yZEluZGV4O1xuICAgICAgICByZXR1cm4gaGVscGVycy5wb2ludChjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCAtIGNvb3JkSW5kZXg7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLnBvaW50KGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF1bY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgaW52YWxpZCcpO1xufVxuXG5leHBvcnRzLmNvb3JkRWFjaCA9IGNvb3JkRWFjaDtcbmV4cG9ydHMuY29vcmRSZWR1Y2UgPSBjb29yZFJlZHVjZTtcbmV4cG9ydHMucHJvcEVhY2ggPSBwcm9wRWFjaDtcbmV4cG9ydHMucHJvcFJlZHVjZSA9IHByb3BSZWR1Y2U7XG5leHBvcnRzLmZlYXR1cmVFYWNoID0gZmVhdHVyZUVhY2g7XG5leHBvcnRzLmZlYXR1cmVSZWR1Y2UgPSBmZWF0dXJlUmVkdWNlO1xuZXhwb3J0cy5jb29yZEFsbCA9IGNvb3JkQWxsO1xuZXhwb3J0cy5nZW9tRWFjaCA9IGdlb21FYWNoO1xuZXhwb3J0cy5nZW9tUmVkdWNlID0gZ2VvbVJlZHVjZTtcbmV4cG9ydHMuZmxhdHRlbkVhY2ggPSBmbGF0dGVuRWFjaDtcbmV4cG9ydHMuZmxhdHRlblJlZHVjZSA9IGZsYXR0ZW5SZWR1Y2U7XG5leHBvcnRzLnNlZ21lbnRFYWNoID0gc2VnbWVudEVhY2g7XG5leHBvcnRzLnNlZ21lbnRSZWR1Y2UgPSBzZWdtZW50UmVkdWNlO1xuZXhwb3J0cy5saW5lRWFjaCA9IGxpbmVFYWNoO1xuZXhwb3J0cy5saW5lUmVkdWNlID0gbGluZVJlZHVjZTtcbmV4cG9ydHMuZmluZFNlZ21lbnQgPSBmaW5kU2VnbWVudDtcbmV4cG9ydHMuZmluZFBvaW50ID0gZmluZFBvaW50O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxudmFyIG1hcnRpbmV6ID0gcmVxdWlyZShcIm1hcnRpbmV6LXBvbHlnb24tY2xpcHBpbmdcIik7XHJcbnZhciBpbnZhcmlhbnRfMSA9IHJlcXVpcmUoXCJAdHVyZi9pbnZhcmlhbnRcIik7XHJcbnZhciBoZWxwZXJzXzEgPSByZXF1aXJlKFwiQHR1cmYvaGVscGVyc1wiKTtcclxuLyoqXHJcbiAqIFRha2VzIHR3byB7QGxpbmsgKE11bHRpKVBvbHlnb24ocyl9IGFuZCByZXR1cm5zIGEgY29tYmluZWQgcG9seWdvbi4gSWYgdGhlIGlucHV0IHBvbHlnb25zIGFyZSBub3QgY29udGlndW91cywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEge0BsaW5rIE11bHRpUG9seWdvbn0gZmVhdHVyZS5cclxuICpcclxuICogQG5hbWUgdW5pb25cclxuICogQHBhcmFtIHtGZWF0dXJlPFBvbHlnb258TXVsdGlQb2x5Z29uPn0gcG9seWdvbjEgaW5wdXQgUG9seWdvbiBmZWF0dXJlXHJcbiAqIEBwYXJhbSB7RmVhdHVyZTxQb2x5Z29ufE11bHRpUG9seWdvbj59IHBvbHlnb24yIFBvbHlnb24gZmVhdHVyZSB0byBkaWZmZXJlbmNlIGZyb20gcG9seWdvbjFcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgUHJvcGVydGllcyB0byBvdXRwdXQgRmVhdHVyZVxyXG4gKiBAcmV0dXJucyB7RmVhdHVyZTwoUG9seWdvbnxNdWx0aVBvbHlnb24pPn0gYSBjb21iaW5lZCB7QGxpbmsgUG9seWdvbn0gb3Ige0BsaW5rIE11bHRpUG9seWdvbn0gZmVhdHVyZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcG9seTEgPSB0dXJmLnBvbHlnb24oW1tcclxuICogICAgIFstODIuNTc0Nzg3LCAzNS41OTQwODddLFxyXG4gKiAgICAgWy04Mi41NzQ3ODcsIDM1LjYxNTU4MV0sXHJcbiAqICAgICBbLTgyLjU0NTI2MSwgMzUuNjE1NTgxXSxcclxuICogICAgIFstODIuNTQ1MjYxLCAzNS41OTQwODddLFxyXG4gKiAgICAgWy04Mi41NzQ3ODcsIDM1LjU5NDA4N11cclxuICogXV0sIHtcImZpbGxcIjogXCIjMGYwXCJ9KTtcclxuICogdmFyIHBvbHkyID0gdHVyZi5wb2x5Z29uKFtbXHJcbiAqICAgICBbLTgyLjU2MDAyNCwgMzUuNTg1MTUzXSxcclxuICogICAgIFstODIuNTYwMDI0LCAzNS42MDI2MDJdLFxyXG4gKiAgICAgWy04Mi41Mjk2NCwgMzUuNjAyNjAyXSxcclxuICogICAgIFstODIuNTI5NjQsIDM1LjU4NTE1M10sXHJcbiAqICAgICBbLTgyLjU2MDAyNCwgMzUuNTg1MTUzXVxyXG4gKiBdXSwge1wiZmlsbFwiOiBcIiMwMGZcIn0pO1xyXG4gKlxyXG4gKiB2YXIgdW5pb24gPSB0dXJmLnVuaW9uKHBvbHkxLCBwb2x5Mik7XHJcbiAqXHJcbiAqIC8vYWRkVG9NYXBcclxuICogdmFyIGFkZFRvTWFwID0gW3BvbHkxLCBwb2x5MiwgdW5pb25dO1xyXG4gKi9cclxuZnVuY3Rpb24gdW5pb24ocG9seWdvbjEsIHBvbHlnb24yLCBvcHRpb25zKSB7XHJcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxyXG4gICAgdmFyIGNvb3JkczEgPSBpbnZhcmlhbnRfMS5nZXRHZW9tKHBvbHlnb24xKS5jb29yZGluYXRlcztcclxuICAgIHZhciBjb29yZHMyID0gaW52YXJpYW50XzEuZ2V0R2VvbShwb2x5Z29uMikuY29vcmRpbmF0ZXM7XHJcbiAgICB2YXIgdW5pb25lZCA9IG1hcnRpbmV6LnVuaW9uKGNvb3JkczEsIGNvb3JkczIpO1xyXG4gICAgaWYgKHVuaW9uZWQubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHVuaW9uZWQubGVuZ3RoID09PSAxKVxyXG4gICAgICAgIHJldHVybiBoZWxwZXJzXzEucG9seWdvbih1bmlvbmVkWzBdLCBvcHRpb25zLnByb3BlcnRpZXMpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgIHJldHVybiBoZWxwZXJzXzEubXVsdGlQb2x5Z29uKHVuaW9uZWQsIG9wdGlvbnMucHJvcGVydGllcyk7XHJcbn1cclxuZXhwb3J0cy5kZWZhdWx0ID0gdW5pb247XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBoZWxwZXJzXzEgPSByZXF1aXJlKFwiQHR1cmYvaGVscGVyc1wiKTtcclxuLyoqXHJcbiAqIFVud3JhcCBhIGNvb3JkaW5hdGUgZnJvbSBhIFBvaW50IEZlYXR1cmUsIEdlb21ldHJ5IG9yIGEgc2luZ2xlIGNvb3JkaW5hdGUuXHJcbiAqXHJcbiAqIEBuYW1lIGdldENvb3JkXHJcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPnxHZW9tZXRyeTxQb2ludD58RmVhdHVyZTxQb2ludD59IGNvb3JkIEdlb0pTT04gUG9pbnQgb3IgYW4gQXJyYXkgb2YgbnVtYmVyc1xyXG4gKiBAcmV0dXJucyB7QXJyYXk8bnVtYmVyPn0gY29vcmRpbmF0ZXNcclxuICogQGV4YW1wbGVcclxuICogdmFyIHB0ID0gdHVyZi5wb2ludChbMTAsIDEwXSk7XHJcbiAqXHJcbiAqIHZhciBjb29yZCA9IHR1cmYuZ2V0Q29vcmQocHQpO1xyXG4gKiAvLz0gWzEwLCAxMF1cclxuICovXHJcbmZ1bmN0aW9uIGdldENvb3JkKGNvb3JkKSB7XHJcbiAgICBpZiAoIWNvb3JkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY29vcmQgaXMgcmVxdWlyZWRcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmQpKSB7XHJcbiAgICAgICAgaWYgKGNvb3JkLnR5cGUgPT09IFwiRmVhdHVyZVwiICYmIGNvb3JkLmdlb21ldHJ5ICE9PSBudWxsICYmIGNvb3JkLmdlb21ldHJ5LnR5cGUgPT09IFwiUG9pbnRcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29vcmQuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb29yZC50eXBlID09PSBcIlBvaW50XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvb3JkLmNvb3JkaW5hdGVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvb3JkKSAmJiBjb29yZC5sZW5ndGggPj0gMiAmJiAhQXJyYXkuaXNBcnJheShjb29yZFswXSkgJiYgIUFycmF5LmlzQXJyYXkoY29vcmRbMV0pKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvb3JkO1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY29vcmQgbXVzdCBiZSBHZW9KU09OIFBvaW50IG9yIGFuIEFycmF5IG9mIG51bWJlcnNcIik7XHJcbn1cclxuZXhwb3J0cy5nZXRDb29yZCA9IGdldENvb3JkO1xyXG4vKipcclxuICogVW53cmFwIGNvb3JkaW5hdGVzIGZyb20gYSBGZWF0dXJlLCBHZW9tZXRyeSBPYmplY3Qgb3IgYW4gQXJyYXlcclxuICpcclxuICogQG5hbWUgZ2V0Q29vcmRzXHJcbiAqIEBwYXJhbSB7QXJyYXk8YW55PnxHZW9tZXRyeXxGZWF0dXJlfSBjb29yZHMgRmVhdHVyZSwgR2VvbWV0cnkgT2JqZWN0IG9yIGFuIEFycmF5XHJcbiAqIEByZXR1cm5zIHtBcnJheTxhbnk+fSBjb29yZGluYXRlc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcG9seSA9IHR1cmYucG9seWdvbihbW1sxMTkuMzIsIC04LjddLCBbMTE5LjU1LCAtOC42OV0sIFsxMTkuNTEsIC04LjU0XSwgWzExOS4zMiwgLTguN11dXSk7XHJcbiAqXHJcbiAqIHZhciBjb29yZHMgPSB0dXJmLmdldENvb3Jkcyhwb2x5KTtcclxuICogLy89IFtbWzExOS4zMiwgLTguN10sIFsxMTkuNTUsIC04LjY5XSwgWzExOS41MSwgLTguNTRdLCBbMTE5LjMyLCAtOC43XV1dXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb29yZHMoY29vcmRzKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb29yZHMpKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvb3JkcztcclxuICAgIH1cclxuICAgIC8vIEZlYXR1cmVcclxuICAgIGlmIChjb29yZHMudHlwZSA9PT0gXCJGZWF0dXJlXCIpIHtcclxuICAgICAgICBpZiAoY29vcmRzLmdlb21ldHJ5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb29yZHMuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gR2VvbWV0cnlcclxuICAgICAgICBpZiAoY29vcmRzLmNvb3JkaW5hdGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb29yZHMuY29vcmRpbmF0ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiY29vcmRzIG11c3QgYmUgR2VvSlNPTiBGZWF0dXJlLCBHZW9tZXRyeSBPYmplY3Qgb3IgYW4gQXJyYXlcIik7XHJcbn1cclxuZXhwb3J0cy5nZXRDb29yZHMgPSBnZXRDb29yZHM7XHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgY29vcmRpbmF0ZXMgY29udGFpbnMgYSBudW1iZXJcclxuICpcclxuICogQG5hbWUgY29udGFpbnNOdW1iZXJcclxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBjb29yZGluYXRlcyBHZW9KU09OIENvb3JkaW5hdGVzXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIEFycmF5IGNvbnRhaW5zIGEgbnVtYmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBjb250YWluc051bWJlcihjb29yZGluYXRlcykge1xyXG4gICAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA+IDEgJiYgaGVscGVyc18xLmlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdKSAmJiBoZWxwZXJzXzEuaXNOdW1iZXIoY29vcmRpbmF0ZXNbMV0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb29yZGluYXRlc1swXSkgJiYgY29vcmRpbmF0ZXNbMF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zTnVtYmVyKGNvb3JkaW5hdGVzWzBdKTtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkaW5hdGVzIG11c3Qgb25seSBjb250YWluIG51bWJlcnNcIik7XHJcbn1cclxuZXhwb3J0cy5jb250YWluc051bWJlciA9IGNvbnRhaW5zTnVtYmVyO1xyXG4vKipcclxuICogRW5mb3JjZSBleHBlY3RhdGlvbnMgYWJvdXQgdHlwZXMgb2YgR2VvSlNPTiBvYmplY3RzIGZvciBUdXJmLlxyXG4gKlxyXG4gKiBAbmFtZSBnZW9qc29uVHlwZVxyXG4gKiBAcGFyYW0ge0dlb0pTT059IHZhbHVlIGFueSBHZW9KU09OIG9iamVjdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBleHBlY3RlZCBHZW9KU09OIHR5cGVcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiBjYWxsaW5nIGZ1bmN0aW9uXHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB2YWx1ZSBpcyBub3QgdGhlIGV4cGVjdGVkIHR5cGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBnZW9qc29uVHlwZSh2YWx1ZSwgdHlwZSwgbmFtZSkge1xyXG4gICAgaWYgKCF0eXBlIHx8ICFuYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZSBhbmQgbmFtZSByZXF1aXJlZFwiKTtcclxuICAgIH1cclxuICAgIGlmICghdmFsdWUgfHwgdmFsdWUudHlwZSAhPT0gdHlwZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdG8gXCIgKyBuYW1lICsgXCI6IG11c3QgYmUgYSBcIiArIHR5cGUgKyBcIiwgZ2l2ZW4gXCIgKyB2YWx1ZS50eXBlKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmdlb2pzb25UeXBlID0gZ2VvanNvblR5cGU7XHJcbi8qKlxyXG4gKiBFbmZvcmNlIGV4cGVjdGF0aW9ucyBhYm91dCB0eXBlcyBvZiB7QGxpbmsgRmVhdHVyZX0gaW5wdXRzIGZvciBUdXJmLlxyXG4gKiBJbnRlcm5hbGx5IHRoaXMgdXNlcyB7QGxpbmsgZ2VvanNvblR5cGV9IHRvIGp1ZGdlIGdlb21ldHJ5IHR5cGVzLlxyXG4gKlxyXG4gKiBAbmFtZSBmZWF0dXJlT2ZcclxuICogQHBhcmFtIHtGZWF0dXJlfSBmZWF0dXJlIGEgZmVhdHVyZSB3aXRoIGFuIGV4cGVjdGVkIGdlb21ldHJ5IHR5cGVcclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgZXhwZWN0ZWQgR2VvSlNPTiB0eXBlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgY2FsbGluZyBmdW5jdGlvblxyXG4gKiBAdGhyb3dzIHtFcnJvcn0gZXJyb3IgaWYgdmFsdWUgaXMgbm90IHRoZSBleHBlY3RlZCB0eXBlLlxyXG4gKi9cclxuZnVuY3Rpb24gZmVhdHVyZU9mKGZlYXR1cmUsIHR5cGUsIG5hbWUpIHtcclxuICAgIGlmICghZmVhdHVyZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGZlYXR1cmUgcGFzc2VkXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLmZlYXR1cmVPZigpIHJlcXVpcmVzIGEgbmFtZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghZmVhdHVyZSB8fCBmZWF0dXJlLnR5cGUgIT09IFwiRmVhdHVyZVwiIHx8ICFmZWF0dXJlLmdlb21ldHJ5KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBcIiArIG5hbWUgKyBcIiwgRmVhdHVyZSB3aXRoIGdlb21ldHJ5IHJlcXVpcmVkXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmZWF0dXJlLmdlb21ldHJ5IHx8IGZlYXR1cmUuZ2VvbWV0cnkudHlwZSAhPT0gdHlwZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdG8gXCIgKyBuYW1lICsgXCI6IG11c3QgYmUgYSBcIiArIHR5cGUgKyBcIiwgZ2l2ZW4gXCIgKyBmZWF0dXJlLmdlb21ldHJ5LnR5cGUpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuZmVhdHVyZU9mID0gZmVhdHVyZU9mO1xyXG4vKipcclxuICogRW5mb3JjZSBleHBlY3RhdGlvbnMgYWJvdXQgdHlwZXMgb2Yge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBpbnB1dHMgZm9yIFR1cmYuXHJcbiAqIEludGVybmFsbHkgdGhpcyB1c2VzIHtAbGluayBnZW9qc29uVHlwZX0gdG8ganVkZ2UgZ2VvbWV0cnkgdHlwZXMuXHJcbiAqXHJcbiAqIEBuYW1lIGNvbGxlY3Rpb25PZlxyXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufSBmZWF0dXJlQ29sbGVjdGlvbiBhIEZlYXR1cmVDb2xsZWN0aW9uIGZvciB3aGljaCBmZWF0dXJlcyB3aWxsIGJlIGp1ZGdlZFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBleHBlY3RlZCBHZW9KU09OIHR5cGVcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiBjYWxsaW5nIGZ1bmN0aW9uXHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB2YWx1ZSBpcyBub3QgdGhlIGV4cGVjdGVkIHR5cGUuXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2YoZmVhdHVyZUNvbGxlY3Rpb24sIHR5cGUsIG5hbWUpIHtcclxuICAgIGlmICghZmVhdHVyZUNvbGxlY3Rpb24pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBmZWF0dXJlQ29sbGVjdGlvbiBwYXNzZWRcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIuY29sbGVjdGlvbk9mKCkgcmVxdWlyZXMgYSBuYW1lXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmZWF0dXJlQ29sbGVjdGlvbiB8fCBmZWF0dXJlQ29sbGVjdGlvbi50eXBlICE9PSBcIkZlYXR1cmVDb2xsZWN0aW9uXCIpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIFwiICsgbmFtZSArIFwiLCBGZWF0dXJlQ29sbGVjdGlvbiByZXF1aXJlZFwiKTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBmZWF0dXJlQ29sbGVjdGlvbi5mZWF0dXJlczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHtcclxuICAgICAgICB2YXIgZmVhdHVyZSA9IF9hW19pXTtcclxuICAgICAgICBpZiAoIWZlYXR1cmUgfHwgZmVhdHVyZS50eXBlICE9PSBcIkZlYXR1cmVcIiB8fCAhZmVhdHVyZS5nZW9tZXRyeSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIFwiICsgbmFtZSArIFwiLCBGZWF0dXJlIHdpdGggZ2VvbWV0cnkgcmVxdWlyZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZmVhdHVyZS5nZW9tZXRyeSB8fCBmZWF0dXJlLmdlb21ldHJ5LnR5cGUgIT09IHR5cGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBcIiArIG5hbWUgKyBcIjogbXVzdCBiZSBhIFwiICsgdHlwZSArIFwiLCBnaXZlbiBcIiArIGZlYXR1cmUuZ2VvbWV0cnkudHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydHMuY29sbGVjdGlvbk9mID0gY29sbGVjdGlvbk9mO1xyXG4vKipcclxuICogR2V0IEdlb21ldHJ5IGZyb20gRmVhdHVyZSBvciBHZW9tZXRyeSBPYmplY3RcclxuICpcclxuICogQHBhcmFtIHtGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIEdlb0pTT04gRmVhdHVyZSBvciBHZW9tZXRyeSBPYmplY3RcclxuICogQHJldHVybnMge0dlb21ldHJ5fG51bGx9IEdlb0pTT04gR2VvbWV0cnkgT2JqZWN0XHJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBnZW9qc29uIGlzIG5vdCBhIEZlYXR1cmUgb3IgR2VvbWV0cnkgT2JqZWN0XHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBwb2ludCA9IHtcclxuICogICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXHJcbiAqICAgXCJwcm9wZXJ0aWVzXCI6IHt9LFxyXG4gKiAgIFwiZ2VvbWV0cnlcIjoge1xyXG4gKiAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcclxuICogICAgIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNDBdXHJcbiAqICAgfVxyXG4gKiB9XHJcbiAqIHZhciBnZW9tID0gdHVyZi5nZXRHZW9tKHBvaW50KVxyXG4gKiAvLz17XCJ0eXBlXCI6IFwiUG9pbnRcIiwgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA0MF19XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRHZW9tKGdlb2pzb24pIHtcclxuICAgIGlmIChnZW9qc29uLnR5cGUgPT09IFwiRmVhdHVyZVwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGdlb2pzb24uZ2VvbWV0cnk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ2VvanNvbjtcclxufVxyXG5leHBvcnRzLmdldEdlb20gPSBnZXRHZW9tO1xyXG4vKipcclxuICogR2V0IEdlb0pTT04gb2JqZWN0J3MgdHlwZSwgR2VvbWV0cnkgdHlwZSBpcyBwcmlvcml0aXplLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0dlb0pTT059IGdlb2pzb24gR2VvSlNPTiBvYmplY3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lPVwiZ2VvanNvblwiXSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBkaXNwbGF5IGluIGVycm9yIG1lc3NhZ2VcclxuICogQHJldHVybnMge3N0cmluZ30gR2VvSlNPTiB0eXBlXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBwb2ludCA9IHtcclxuICogICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXHJcbiAqICAgXCJwcm9wZXJ0aWVzXCI6IHt9LFxyXG4gKiAgIFwiZ2VvbWV0cnlcIjoge1xyXG4gKiAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcclxuICogICAgIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNDBdXHJcbiAqICAgfVxyXG4gKiB9XHJcbiAqIHZhciBnZW9tID0gdHVyZi5nZXRUeXBlKHBvaW50KVxyXG4gKiAvLz1cIlBvaW50XCJcclxuICovXHJcbmZ1bmN0aW9uIGdldFR5cGUoZ2VvanNvbiwgbmFtZSkge1xyXG4gICAgaWYgKGdlb2pzb24udHlwZSA9PT0gXCJGZWF0dXJlQ29sbGVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiRmVhdHVyZUNvbGxlY3Rpb25cIjtcclxuICAgIH1cclxuICAgIGlmIChnZW9qc29uLnR5cGUgPT09IFwiR2VvbWV0cnlDb2xsZWN0aW9uXCIpIHtcclxuICAgICAgICByZXR1cm4gXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjtcclxuICAgIH1cclxuICAgIGlmIChnZW9qc29uLnR5cGUgPT09IFwiRmVhdHVyZVwiICYmIGdlb2pzb24uZ2VvbWV0cnkgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gZ2VvanNvbi5nZW9tZXRyeS50eXBlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdlb2pzb24udHlwZTtcclxufVxyXG5leHBvcnRzLmdldFR5cGUgPSBnZXRUeXBlO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgZ2xvYmFsLnByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBnbG9iYWwucHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxudmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3XG5pZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnNwZWNpZXMgJiZcbiAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlciwgU3ltYm9sLnNwZWNpZXMsIHtcbiAgICB2YWx1ZTogbnVsbCxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmIChpc0FycmF5QnVmZmVyKHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICByZXR1cm4gZnJvbU9iamVjdCh2YWx1ZSlcbn1cblxuLyoqXG4gKiBGdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBCdWZmZXIoYXJnLCBlbmNvZGluZykgYnV0IHRocm93cyBhIFR5cGVFcnJvclxuICogaWYgdmFsdWUgaXMgYSBudW1iZXIuXG4gKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pXG4gKiBCdWZmZXIuZnJvbShhcnJheSlcbiAqIEJ1ZmZlci5mcm9tKGJ1ZmZlcilcbiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKVxuICoqL1xuQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzE0OFxuQnVmZmVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBVaW50OEFycmF5LnByb3RvdHlwZVxuQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIHZhciBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIGJ1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuKVxuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWZcbiAgICB9XG5cbiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKGlzQXJyYXlCdWZmZXJWaWV3KG9iaikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IG51bWJlcklzTmFOKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IEtfTUFYX0xFTkdUSGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycycpXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH1cbiAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChpc0FycmF5QnVmZmVyVmlldyhzdHJpbmcpIHx8IGlzQXJyYXlCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChudW1iZXJJc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKSA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpID8gM1xuICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRikgPyAyXG4gICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gdG9IZXgoYnVmW2ldKVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyAoYnl0ZXNbaSArIDFdICogMjU2KSlcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZylcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlcnMgZnJvbSBhbm90aGVyIGNvbnRleHQgKGkuZS4gYW4gaWZyYW1lKSBkbyBub3QgcGFzcyB0aGUgYGluc3RhbmNlb2ZgIGNoZWNrXG4vLyBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyB2YWxpZC4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgKG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXlCdWZmZXInICYmXG4gICAgICB0eXBlb2Ygb2JqLmJ5dGVMZW5ndGggPT09ICdudW1iZXInKVxufVxuXG4vLyBOb2RlIDAuMTAgc3VwcG9ydHMgYEFycmF5QnVmZmVyYCBidXQgbGFja3MgYEFycmF5QnVmZmVyLmlzVmlld2BcbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3IChvYmopIHtcbiAgcmV0dXJuICh0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcob2JqKVxufVxuXG5mdW5jdGlvbiBudW1iZXJJc05hTiAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMicgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNik7XG52YXIgS0VZID0gJ2ZpbmRJbmRleCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuL19kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ09QRC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IuZ2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci5zZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLnZhbHVlID0gVjtcbiAgICAgIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBleGlzdGluZ0Rlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgY3JlYXRlRGVzYygwLCBWKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjIgU3RyaW5nLnByb3RvdHlwZS5hbmNob3IobmFtZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2FuY2hvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmNob3IobmFtZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ25hbWUnLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNSBTdHJpbmcucHJvdG90eXBlLmJvbGQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYm9sZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBib2xkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTAgU3RyaW5nLnByb3RvdHlwZS5saW5rKHVybClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2xpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3ViKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0NjQnLCA4LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0TWFwXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4sIEE7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXRNYXAnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0dGVuXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXR0ZW46IGZ1bmN0aW9uIGZsYXR0ZW4oLyogZGVwdGhBcmcgPSAxICovKSB7XG4gICAgdmFyIGRlcHRoQXJnID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhBcmcgPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGhBcmcpKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0dGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IHNldDogYUZ1bmN0aW9uKHNldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoaXQpIHtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuL19vd24ta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXREZXNjID0gZ09QRC5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXksIGRlc2M7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaSkge1xuICAgICAgZGVzYyA9IGdldERlc2MoTywga2V5ID0ga2V5c1tpKytdKTtcbiAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbnZhciBGT1JDRUQgPSAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ/CgrrcnLmF0KDApICE9PSAn8KCutyc7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRUQsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZFN0YXJ0OiBmdW5jdGlvbiBwYWRTdGFydChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5c3RlbScsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iLCIvLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIiwicmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNlYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jYnJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2x6MzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5mcm91bmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5oeXBvdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmltdWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxMCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRydW5jJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJhdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ibGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdHJpa2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1YicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUubm93Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5qb2luJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb21lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmNsYW1wJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaWFkZGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pc3ViaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmltdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC51bXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UudHJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFzYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuaW1tZWRpYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL21vZHVsZXMvX2NvcmUnKTtcbiIsIlxuLyoqXG4gKiBFeHBvc2UgYEVtaXR0ZXJgLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gRW1pdHRlcjtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBFbWl0dGVyYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIEVtaXR0ZXIob2JqKSB7XG4gIGlmIChvYmopIHJldHVybiBtaXhpbihvYmopO1xufTtcblxuLyoqXG4gKiBNaXhpbiB0aGUgZW1pdHRlciBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1peGluKG9iaikge1xuICBmb3IgKHZhciBrZXkgaW4gRW1pdHRlci5wcm90b3R5cGUpIHtcbiAgICBvYmpba2V5XSA9IEVtaXR0ZXIucHJvdG90eXBlW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBMaXN0ZW4gb24gdGhlIGdpdmVuIGBldmVudGAgd2l0aCBgZm5gLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLm9uID1cbkVtaXR0ZXIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG4gICh0aGlzLl9jYWxsYmFja3NbZXZlbnRdID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSB8fCBbXSlcbiAgICAucHVzaChmbik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBZGRzIGFuIGBldmVudGAgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYSBzaW5nbGVcbiAqIHRpbWUgdGhlbiBhdXRvbWF0aWNhbGx5IHJlbW92ZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RW1pdHRlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKGV2ZW50LCBmbil7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuXG4gIGZ1bmN0aW9uIG9uKCkge1xuICAgIHNlbGYub2ZmKGV2ZW50LCBvbik7XG4gICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIG9uLmZuID0gZm47XG4gIHRoaXMub24oZXZlbnQsIG9uKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2FsbGJhY2sgZm9yIGBldmVudGAgb3IgYWxsXG4gKiByZWdpc3RlcmVkIGNhbGxiYWNrcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vZmYgPVxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuRW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudCwgZm4pe1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG5cbiAgLy8gYWxsXG4gIGlmICgwID09IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHNwZWNpZmljIGV2ZW50XG4gIHZhciBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdO1xuICBpZiAoIWNhbGxiYWNrcykgcmV0dXJuIHRoaXM7XG5cbiAgLy8gcmVtb3ZlIGFsbCBoYW5kbGVyc1xuICBpZiAoMSA9PSBhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tldmVudF07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyByZW1vdmUgc3BlY2lmaWMgaGFuZGxlclxuICB2YXIgY2I7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2IgPSBjYWxsYmFja3NbaV07XG4gICAgaWYgKGNiID09PSBmbiB8fCBjYi5mbiA9PT0gZm4pIHtcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIEVtaXQgYGV2ZW50YCB3aXRoIHRoZSBnaXZlbiBhcmdzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtNaXhlZH0gLi4uXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihldmVudCl7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcbiAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSlcbiAgICAsIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF07XG5cbiAgaWYgKGNhbGxiYWNrcykge1xuICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2FsbGJhY2tzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICBjYWxsYmFja3NbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybiBhcnJheSBvZiBjYWxsYmFja3MgZm9yIGBldmVudGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQpe1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG4gIHJldHVybiB0aGlzLl9jYWxsYmFja3NbZXZlbnRdIHx8IFtdO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGlzIGVtaXR0ZXIgaGFzIGBldmVudGAgaGFuZGxlcnMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudCl7XG4gIHJldHVybiAhISB0aGlzLmxpc3RlbmVycyhldmVudCkubGVuZ3RoO1xufTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuICgnICsgZXIgKyAnKScpO1xuICAgICAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSBpZiAobGlzdGVuZXJzKSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy5fZXZlbnRzKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgICBpZiAoaXNGdW5jdGlvbihldmxpc3RlbmVyKSlcbiAgICAgIHJldHVybiAxO1xuICAgIGVsc2UgaWYgKGV2bGlzdGVuZXIpXG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbiIsIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCIvKipcbiAqIG1hcnRpbmV6IHYwLjQuM1xuICogTWFydGluZXogcG9seWdvbiBjbGlwcGluZyBhbGdvcml0aG0sIGRvZXMgYm9vbGVhbiBvcGVyYXRpb24gb24gcG9seWdvbnMgKG11bHRpcG9seWdvbnMsIHBvbHlnb25zIHdpdGggaG9sZXMgZXRjKTogaW50ZXJzZWN0aW9uLCB1bmlvbiwgZGlmZmVyZW5jZSwgeG9yXG4gKlxuICogQGF1dGhvciBBbGV4IE1pbGV2c2tpIDxpbmZvQHc4ci5uYW1lPlxuICogQGxpY2Vuc2UgTUlUXG4gKiBAcHJlc2VydmVcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwubWFydGluZXogPSB7fSkpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBERUZBVUxUX0NPTVBBUkUgKGEsIGIpIHsgcmV0dXJuIGEgPiBiID8gMSA6IGEgPCBiID8gLTEgOiAwOyB9XG5cbiAgdmFyIFNwbGF5VHJlZSA9IGZ1bmN0aW9uIFNwbGF5VHJlZShjb21wYXJlLCBub0R1cGxpY2F0ZXMpIHtcbiAgICBpZiAoIGNvbXBhcmUgPT09IHZvaWQgMCApIGNvbXBhcmUgPSBERUZBVUxUX0NPTVBBUkU7XG4gICAgaWYgKCBub0R1cGxpY2F0ZXMgPT09IHZvaWQgMCApIG5vRHVwbGljYXRlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fY29tcGFyZSA9IGNvbXBhcmU7XG4gICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gICAgdGhpcy5fc2l6ZSA9IDA7XG4gICAgdGhpcy5fbm9EdXBsaWNhdGVzID0gISFub0R1cGxpY2F0ZXM7XG4gIH07XG5cbiAgdmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgc2l6ZTogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5yb3RhdGVMZWZ0ID0gZnVuY3Rpb24gcm90YXRlTGVmdCAoeCkge1xuICAgIHZhciB5ID0geC5yaWdodDtcbiAgICBpZiAoeSkge1xuICAgICAgeC5yaWdodCA9IHkubGVmdDtcbiAgICAgIGlmICh5LmxlZnQpIHsgeS5sZWZ0LnBhcmVudCA9IHg7IH1cbiAgICAgIHkucGFyZW50ID0geC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKCF4LnBhcmVudCkgICAgICAgICAgICAgIHsgdGhpcy5fcm9vdCA9IHk7IH1cbiAgICBlbHNlIGlmICh4ID09PSB4LnBhcmVudC5sZWZ0KSB7IHgucGFyZW50LmxlZnQgPSB5OyB9XG4gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHsgeC5wYXJlbnQucmlnaHQgPSB5OyB9XG4gICAgaWYgKHkpIHsgeS5sZWZ0ID0geDsgfVxuICAgIHgucGFyZW50ID0geTtcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUucm90YXRlUmlnaHQgPSBmdW5jdGlvbiByb3RhdGVSaWdodCAoeCkge1xuICAgIHZhciB5ID0geC5sZWZ0O1xuICAgIGlmICh5KSB7XG4gICAgICB4LmxlZnQgPSB5LnJpZ2h0O1xuICAgICAgaWYgKHkucmlnaHQpIHsgeS5yaWdodC5wYXJlbnQgPSB4OyB9XG4gICAgICB5LnBhcmVudCA9IHgucGFyZW50O1xuICAgIH1cblxuICAgIGlmICgheC5wYXJlbnQpICAgICAgICAgICAgIHsgdGhpcy5fcm9vdCA9IHk7IH1cbiAgICBlbHNlIGlmKHggPT09IHgucGFyZW50LmxlZnQpIHsgeC5wYXJlbnQubGVmdCA9IHk7IH1cbiAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICB7IHgucGFyZW50LnJpZ2h0ID0geTsgfVxuICAgIGlmICh5KSB7IHkucmlnaHQgPSB4OyB9XG4gICAgeC5wYXJlbnQgPSB5O1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5fc3BsYXkgPSBmdW5jdGlvbiBfc3BsYXkgKHgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgd2hpbGUgKHgucGFyZW50KSB7XG4gICAgICB2YXIgcCA9IHgucGFyZW50O1xuICAgICAgaWYgKCFwLnBhcmVudCkge1xuICAgICAgICBpZiAocC5sZWZ0ID09PSB4KSB7IHRoaXMkMS5yb3RhdGVSaWdodChwKTsgfVxuICAgICAgICBlbHNlICAgICAgICAgICAgeyB0aGlzJDEucm90YXRlTGVmdChwKTsgfVxuICAgICAgfSBlbHNlIGlmIChwLmxlZnQgPT09IHggJiYgcC5wYXJlbnQubGVmdCA9PT0gcCkge1xuICAgICAgICB0aGlzJDEucm90YXRlUmlnaHQocC5wYXJlbnQpO1xuICAgICAgICB0aGlzJDEucm90YXRlUmlnaHQocCk7XG4gICAgICB9IGVsc2UgaWYgKHAucmlnaHQgPT09IHggJiYgcC5wYXJlbnQucmlnaHQgPT09IHApIHtcbiAgICAgICAgdGhpcyQxLnJvdGF0ZUxlZnQocC5wYXJlbnQpO1xuICAgICAgICB0aGlzJDEucm90YXRlTGVmdChwKTtcbiAgICAgIH0gZWxzZSBpZiAocC5sZWZ0ID09PSB4ICYmIHAucGFyZW50LnJpZ2h0ID09PSBwKSB7XG4gICAgICAgIHRoaXMkMS5yb3RhdGVSaWdodChwKTtcbiAgICAgICAgdGhpcyQxLnJvdGF0ZUxlZnQocCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzJDEucm90YXRlTGVmdChwKTtcbiAgICAgICAgdGhpcyQxLnJvdGF0ZVJpZ2h0KHApO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuc3BsYXkgPSBmdW5jdGlvbiBzcGxheSAoeCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcCwgZ3AsIGdncCwgbCwgcjtcblxuICAgIHdoaWxlICh4LnBhcmVudCkge1xuICAgICAgcCA9IHgucGFyZW50O1xuICAgICAgZ3AgPSBwLnBhcmVudDtcblxuICAgICAgaWYgKGdwICYmIGdwLnBhcmVudCkge1xuICAgICAgICBnZ3AgPSBncC5wYXJlbnQ7XG4gICAgICAgIGlmIChnZ3AubGVmdCA9PT0gZ3ApIHsgZ2dwLmxlZnQ9IHg7IH1cbiAgICAgICAgZWxzZSAgICAgICAgICAgICAgIHsgZ2dwLnJpZ2h0ID0geDsgfVxuICAgICAgICB4LnBhcmVudCA9IGdncDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHgucGFyZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcyQxLl9yb290ID0geDtcbiAgICAgIH1cblxuICAgICAgbCA9IHgubGVmdDsgciA9IHgucmlnaHQ7XG5cbiAgICAgIGlmICh4ID09PSBwLmxlZnQpIHsgLy8gbGVmdFxuICAgICAgICBpZiAoZ3ApIHtcbiAgICAgICAgICBpZiAoZ3AubGVmdCA9PT0gcCkge1xuICAgICAgICAgICAgLyogemlnLXppZyAqL1xuICAgICAgICAgICAgaWYgKHAucmlnaHQpIHtcbiAgICAgICAgICAgICAgZ3AubGVmdCA9IHAucmlnaHQ7XG4gICAgICAgICAgICAgIGdwLmxlZnQucGFyZW50ID0gZ3A7XG4gICAgICAgICAgICB9IGVsc2UgeyBncC5sZWZ0ID0gbnVsbDsgfVxuXG4gICAgICAgICAgICBwLnJpZ2h0ID0gZ3A7XG4gICAgICAgICAgICBncC5wYXJlbnQgPSBwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiB6aWctemFnICovXG4gICAgICAgICAgICBpZiAobCkge1xuICAgICAgICAgICAgICBncC5yaWdodCA9IGw7XG4gICAgICAgICAgICAgIGwucGFyZW50ID0gZ3A7XG4gICAgICAgICAgICB9IGVsc2UgeyBncC5yaWdodCA9IG51bGw7IH1cblxuICAgICAgICAgICAgeC5sZWZ0ICA9IGdwO1xuICAgICAgICAgICAgZ3AucGFyZW50ID0geDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICBwLmxlZnQgPSByO1xuICAgICAgICAgIHIucGFyZW50ID0gcDtcbiAgICAgICAgfSBlbHNlIHsgcC5sZWZ0ID0gbnVsbDsgfVxuXG4gICAgICAgIHgucmlnaHQ9IHA7XG4gICAgICAgIHAucGFyZW50ID0geDtcbiAgICAgIH0gZWxzZSB7IC8vIHJpZ2h0XG4gICAgICAgIGlmIChncCkge1xuICAgICAgICAgIGlmIChncC5yaWdodCA9PT0gcCkge1xuICAgICAgICAgICAgLyogemlnLXppZyAqL1xuICAgICAgICAgICAgaWYgKHAubGVmdCkge1xuICAgICAgICAgICAgICBncC5yaWdodCA9IHAubGVmdDtcbiAgICAgICAgICAgICAgZ3AucmlnaHQucGFyZW50ID0gZ3A7XG4gICAgICAgICAgICB9IGVsc2UgeyBncC5yaWdodCA9IG51bGw7IH1cblxuICAgICAgICAgICAgcC5sZWZ0ID0gZ3A7XG4gICAgICAgICAgICBncC5wYXJlbnQgPSBwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiB6aWctemFnICovXG4gICAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgICBncC5sZWZ0ID0gcjtcbiAgICAgICAgICAgICAgci5wYXJlbnQgPSBncDtcbiAgICAgICAgICAgIH0gZWxzZSB7IGdwLmxlZnQgPSBudWxsOyB9XG5cbiAgICAgICAgICAgIHgucmlnaHQgPSBncDtcbiAgICAgICAgICAgIGdwLnBhcmVudCA9IHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgcC5yaWdodCA9IGw7XG4gICAgICAgICAgbC5wYXJlbnQgPSBwO1xuICAgICAgICB9IGVsc2UgeyBwLnJpZ2h0ID0gbnVsbDsgfVxuXG4gICAgICAgIHgubGVmdCA9IHA7XG4gICAgICAgIHAucGFyZW50ID0geDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlICh1LCB2KSB7XG4gICAgaWYgKCF1LnBhcmVudCkgeyB0aGlzLl9yb290ID0gdjsgfVxuICAgIGVsc2UgaWYgKHUgPT09IHUucGFyZW50LmxlZnQpIHsgdS5wYXJlbnQubGVmdCA9IHY7IH1cbiAgICBlbHNlIHsgdS5wYXJlbnQucmlnaHQgPSB2OyB9XG4gICAgaWYgKHYpIHsgdi5wYXJlbnQgPSB1LnBhcmVudDsgfVxuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5taW5Ob2RlID0gZnVuY3Rpb24gbWluTm9kZSAodSkge1xuICAgICAgaWYgKCB1ID09PSB2b2lkIDAgKSB1ID0gdGhpcy5fcm9vdDtcblxuICAgIGlmICh1KSB7IHdoaWxlICh1LmxlZnQpIHsgdSA9IHUubGVmdDsgfSB9XG4gICAgcmV0dXJuIHU7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLm1heE5vZGUgPSBmdW5jdGlvbiBtYXhOb2RlICh1KSB7XG4gICAgICBpZiAoIHUgPT09IHZvaWQgMCApIHUgPSB0aGlzLl9yb290O1xuXG4gICAgaWYgKHUpIHsgd2hpbGUgKHUucmlnaHQpIHsgdSA9IHUucmlnaHQ7IH0gfVxuICAgIHJldHVybiB1O1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQgKGtleSwgZGF0YSkge1xuICAgIHZhciB6ID0gdGhpcy5fcm9vdDtcbiAgICB2YXIgcCA9IG51bGw7XG4gICAgdmFyIGNvbXAgPSB0aGlzLl9jb21wYXJlO1xuICAgIHZhciBjbXA7XG5cbiAgICBpZiAodGhpcy5fbm9EdXBsaWNhdGVzKSB7XG4gICAgICB3aGlsZSAoeikge1xuICAgICAgICBwID0gejtcbiAgICAgICAgY21wID0gY29tcCh6LmtleSwga2V5KTtcbiAgICAgICAgaWYgKGNtcCA9PT0gMCkgeyByZXR1cm47IH1cbiAgICAgICAgZWxzZSBpZiAoY29tcCh6LmtleSwga2V5KSA8IDApIHsgeiA9IHoucmlnaHQ7IH1cbiAgICAgICAgZWxzZSB7IHogPSB6LmxlZnQ7IH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKHopIHtcbiAgICAgICAgcCA9IHo7XG4gICAgICAgIGlmIChjb21wKHoua2V5LCBrZXkpIDwgMCkgeyB6ID0gei5yaWdodDsgfVxuICAgICAgICBlbHNlIHsgeiA9IHoubGVmdDsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHogPSB7IGtleToga2V5LCBkYXRhOiBkYXRhLCBsZWZ0OiBudWxsLCByaWdodDogbnVsbCwgcGFyZW50OiBwIH07XG5cbiAgICBpZiAoIXApICAgICAgICAgICAgICAgICAgICAgICAgeyB0aGlzLl9yb290ID0gejsgfVxuICAgIGVsc2UgaWYgKGNvbXAocC5rZXksIHoua2V5KSA8IDApIHsgcC5yaWdodCA9IHo7IH1cbiAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBwLmxlZnQ9IHo7IH1cblxuICAgIHRoaXMuc3BsYXkoeik7XG4gICAgdGhpcy5fc2l6ZSsrO1xuICAgIHJldHVybiB6O1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24gZmluZCAoa2V5KSB7XG4gICAgdmFyIHogID0gdGhpcy5fcm9vdDtcbiAgICB2YXIgY29tcCA9IHRoaXMuX2NvbXBhcmU7XG4gICAgd2hpbGUgKHopIHtcbiAgICAgIHZhciBjbXAgPSBjb21wKHoua2V5LCBrZXkpO1xuICAgICAgaWYgICAgKGNtcCA8IDApIHsgeiA9IHoucmlnaHQ7IH1cbiAgICAgIGVsc2UgaWYgKGNtcCA+IDApIHsgeiA9IHoubGVmdDsgfVxuICAgICAgZWxzZSAgICAgICAgICAgIHsgcmV0dXJuIHo7IH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRyZWUgY29udGFpbnMgYSBub2RlIHdpdGggdGhlIGdpdmVuIGtleVxuICAgKiBAcGFyYW17S2V5fSBrZXlcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZS9mYWxzZVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zIChrZXkpIHtcbiAgICB2YXIgbm9kZSAgICAgPSB0aGlzLl9yb290O1xuICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5fY29tcGFyZTtcbiAgICB3aGlsZSAobm9kZSl7XG4gICAgICB2YXIgY21wID0gY29tcGFyYXRvcihrZXksIG5vZGUua2V5KTtcbiAgICAgIGlmICAgIChjbXAgPT09IDApIHsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGVsc2UgaWYgKGNtcCA8IDApIHsgbm9kZSA9IG5vZGUubGVmdDsgfVxuICAgICAgZWxzZSAgICAgICAgICAgICAgeyBub2RlID0gbm9kZS5yaWdodDsgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlIChrZXkpIHtcbiAgICB2YXIgeiA9IHRoaXMuZmluZChrZXkpO1xuXG4gICAgaWYgKCF6KSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgdGhpcy5zcGxheSh6KTtcblxuICAgIGlmICghei5sZWZ0KSB7IHRoaXMucmVwbGFjZSh6LCB6LnJpZ2h0KTsgfVxuICAgIGVsc2UgaWYgKCF6LnJpZ2h0KSB7IHRoaXMucmVwbGFjZSh6LCB6LmxlZnQpOyB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgeSA9IHRoaXMubWluTm9kZSh6LnJpZ2h0KTtcbiAgICAgIGlmICh5LnBhcmVudCAhPT0geikge1xuICAgICAgICB0aGlzLnJlcGxhY2UoeSwgeS5yaWdodCk7XG4gICAgICAgIHkucmlnaHQgPSB6LnJpZ2h0O1xuICAgICAgICB5LnJpZ2h0LnBhcmVudCA9IHk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcGxhY2UoeiwgeSk7XG4gICAgICB5LmxlZnQgPSB6LmxlZnQ7XG4gICAgICB5LmxlZnQucGFyZW50ID0geTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaXplLS07XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZU5vZGUgPSBmdW5jdGlvbiByZW1vdmVOb2RlICh6KSB7XG4gICAgaWYgKCF6KSB7IHJldHVybiBmYWxzZTsgfVxuXG4gICAgdGhpcy5zcGxheSh6KTtcblxuICAgIGlmICghei5sZWZ0KSB7IHRoaXMucmVwbGFjZSh6LCB6LnJpZ2h0KTsgfVxuICAgIGVsc2UgaWYgKCF6LnJpZ2h0KSB7IHRoaXMucmVwbGFjZSh6LCB6LmxlZnQpOyB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgeSA9IHRoaXMubWluTm9kZSh6LnJpZ2h0KTtcbiAgICAgIGlmICh5LnBhcmVudCAhPT0geikge1xuICAgICAgICB0aGlzLnJlcGxhY2UoeSwgeS5yaWdodCk7XG4gICAgICAgIHkucmlnaHQgPSB6LnJpZ2h0O1xuICAgICAgICB5LnJpZ2h0LnBhcmVudCA9IHk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcGxhY2UoeiwgeSk7XG4gICAgICB5LmxlZnQgPSB6LmxlZnQ7XG4gICAgICB5LmxlZnQucGFyZW50ID0geTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaXplLS07XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLmVyYXNlID0gZnVuY3Rpb24gZXJhc2UgKGtleSkge1xuICAgIHZhciB6ID0gdGhpcy5maW5kKGtleSk7XG4gICAgaWYgKCF6KSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5zcGxheSh6KTtcblxuICAgIHZhciBzID0gei5sZWZ0O1xuICAgIHZhciB0ID0gei5yaWdodDtcblxuICAgIHZhciBzTWF4ID0gbnVsbDtcbiAgICBpZiAocykge1xuICAgICAgcy5wYXJlbnQgPSBudWxsO1xuICAgICAgc01heCA9IHRoaXMubWF4Tm9kZShzKTtcbiAgICAgIHRoaXMuc3BsYXkoc01heCk7XG4gICAgICB0aGlzLl9yb290ID0gc01heDtcbiAgICB9XG4gICAgaWYgKHQpIHtcbiAgICAgIGlmIChzKSB7IHNNYXgucmlnaHQgPSB0OyB9XG4gICAgICBlbHNlIHsgdGhpcy5fcm9vdCA9IHQ7IH1cbiAgICAgIHQucGFyZW50ID0gc01heDtcbiAgICB9XG5cbiAgICB0aGlzLl9zaXplLS07XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW5kIHJldHVybnMgdGhlIG5vZGUgd2l0aCBzbWFsbGVzdCBrZXlcbiAgICogQHJldHVybiB7P05vZGV9XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uIHBvcCAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLl9yb290LCByZXR1cm5WYWx1ZSA9IG51bGw7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHdoaWxlIChub2RlLmxlZnQpIHsgbm9kZSA9IG5vZGUubGVmdDsgfVxuICAgICAgcmV0dXJuVmFsdWUgPSB7IGtleTogbm9kZS5rZXksIGRhdGE6IG5vZGUuZGF0YSB9O1xuICAgICAgdGhpcy5yZW1vdmUobm9kZS5rZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH07XG5cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG5cbiAgLyoqXG4gICAqIFN1Y2Nlc3NvciBub2RlXG4gICAqIEBwYXJhbXtOb2RlfSBub2RlXG4gICAqIEByZXR1cm4gez9Ob2RlfVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gbmV4dCAobm9kZSkge1xuICAgIHZhciBzdWNjZXNzb3IgPSBub2RlO1xuICAgIGlmIChzdWNjZXNzb3IpIHtcbiAgICAgIGlmIChzdWNjZXNzb3IucmlnaHQpIHtcbiAgICAgICAgc3VjY2Vzc29yID0gc3VjY2Vzc29yLnJpZ2h0O1xuICAgICAgICB3aGlsZSAoc3VjY2Vzc29yICYmIHN1Y2Nlc3Nvci5sZWZ0KSB7IHN1Y2Nlc3NvciA9IHN1Y2Nlc3Nvci5sZWZ0OyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzb3IgPSBub2RlLnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHN1Y2Nlc3NvciAmJiBzdWNjZXNzb3IucmlnaHQgPT09IG5vZGUpIHtcbiAgICAgICAgICBub2RlID0gc3VjY2Vzc29yOyBzdWNjZXNzb3IgPSBzdWNjZXNzb3IucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzb3I7XG4gIH07XG5cblxuICAvKipcbiAgICogUHJlZGVjZXNzb3Igbm9kZVxuICAgKiBAcGFyYW17Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJuIHs/Tm9kZX1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uIHByZXYgKG5vZGUpIHtcbiAgICB2YXIgcHJlZGVjZXNzb3IgPSBub2RlO1xuICAgIGlmIChwcmVkZWNlc3Nvcikge1xuICAgICAgaWYgKHByZWRlY2Vzc29yLmxlZnQpIHtcbiAgICAgICAgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3Nvci5sZWZ0O1xuICAgICAgICB3aGlsZSAocHJlZGVjZXNzb3IgJiYgcHJlZGVjZXNzb3IucmlnaHQpIHsgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3Nvci5yaWdodDsgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJlZGVjZXNzb3IgPSBub2RlLnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHByZWRlY2Vzc29yICYmIHByZWRlY2Vzc29yLmxlZnQgPT09IG5vZGUpIHtcbiAgICAgICAgICBub2RlID0gcHJlZGVjZXNzb3I7XG4gICAgICAgICAgcHJlZGVjZXNzb3IgPSBwcmVkZWNlc3Nvci5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWRlY2Vzc29yO1xuICB9O1xuICAvKiBlc2xpbnQtZW5hYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cblxuXG4gIC8qKlxuICAgKiBAcGFyYW17Zm9yRWFjaENhbGxiYWNrfSBjYWxsYmFja1xuICAgKiBAcmV0dXJuIHtTcGxheVRyZWV9XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoIChjYWxsYmFjaykge1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5fcm9vdDtcbiAgICB2YXIgcyA9IFtdLCBkb25lID0gZmFsc2UsIGkgPSAwO1xuXG4gICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICAvLyBSZWFjaCB0aGUgbGVmdCBtb3N0IE5vZGUgb2YgdGhlIGN1cnJlbnQgTm9kZVxuICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgLy8gUGxhY2UgcG9pbnRlciB0byBhIHRyZWUgbm9kZSBvbiB0aGUgc3RhY2tcbiAgICAgICAgLy8gYmVmb3JlIHRyYXZlcnNpbmcgdGhlIG5vZGUncyBsZWZ0IHN1YnRyZWVcbiAgICAgICAgcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQmFja1RyYWNrIGZyb20gdGhlIGVtcHR5IHN1YnRyZWUgYW5kIHZpc2l0IHRoZSBOb2RlXG4gICAgICAgIC8vIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrOyBob3dldmVyLCBpZiB0aGUgc3RhY2sgaXNcbiAgICAgICAgLy8gZW1wdHkgeW91IGFyZSBkb25lXG4gICAgICAgIGlmIChzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjdXJyZW50ID0gcy5wb3AoKTtcbiAgICAgICAgICBjYWxsYmFjayhjdXJyZW50LCBpKyspO1xuXG4gICAgICAgICAgLy8gV2UgaGF2ZSB2aXNpdGVkIHRoZSBub2RlIGFuZCBpdHMgbGVmdFxuICAgICAgICAgIC8vIHN1YnRyZWUuIE5vdywgaXQncyByaWdodCBzdWJ0cmVlJ3MgdHVyblxuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0O1xuICAgICAgICB9IGVsc2UgeyBkb25lID0gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBXYWxrIGtleSByYW5nZSBmcm9tIGBsb3dgIHRvIGBoaWdoYC4gU3RvcHMgaWYgYGZuYCByZXR1cm5zIGEgdmFsdWUuXG4gICAqIEBwYXJhbXtLZXl9ICAgIGxvd1xuICAgKiBAcGFyYW17S2V5fSAgICBoaWdoXG4gICAqIEBwYXJhbXtGdW5jdGlvbn0gZm5cbiAgICogQHBhcmFteyo/fSAgICAgY3R4XG4gICAqIEByZXR1cm4ge1NwbGF5VHJlZX1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUucmFuZ2UgPSBmdW5jdGlvbiByYW5nZSAobG93LCBoaWdoLCBmbiwgY3R4KSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBRID0gW107XG4gICAgdmFyIGNvbXBhcmUgPSB0aGlzLl9jb21wYXJlO1xuICAgIHZhciBub2RlID0gdGhpcy5fcm9vdCwgY21wO1xuXG4gICAgd2hpbGUgKFEubGVuZ3RoICE9PSAwIHx8IG5vZGUpIHtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIFEucHVzaChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUubGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUgPSBRLnBvcCgpO1xuICAgICAgICBjbXAgPSBjb21wYXJlKG5vZGUua2V5LCBoaWdoKTtcbiAgICAgICAgaWYgKGNtcCA+IDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlKG5vZGUua2V5LCBsb3cpID49IDApIHtcbiAgICAgICAgICBpZiAoZm4uY2FsbChjdHgsIG5vZGUpKSB7IHJldHVybiB0aGlzJDE7IH0gLy8gc3RvcCBpZiBzbXRoIGlzIHJldHVybmVkXG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUucmlnaHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBrZXlzIGluIG9yZGVyXG4gICAqIEByZXR1cm4ge0FycmF5PEtleT59XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiBrZXlzICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX3Jvb3Q7XG4gICAgdmFyIHMgPSBbXSwgciA9IFtdLCBkb25lID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoIWRvbmUpIHtcbiAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgIHMucHVzaChjdXJyZW50KTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjdXJyZW50ID0gcy5wb3AoKTtcbiAgICAgICAgICByLnB1c2goY3VycmVudC5rZXkpO1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0O1xuICAgICAgICB9IGVsc2UgeyBkb25lID0gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGBkYXRhYCBmaWVsZHMgb2YgYWxsIG5vZGVzIGluIG9yZGVyLlxuICAgKiBAcmV0dXJuIHtBcnJheTxWYWx1ZT59XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uIHZhbHVlcyAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9yb290O1xuICAgIHZhciBzID0gW10sIHIgPSBbXSwgZG9uZSA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICBzLnB1c2goY3VycmVudCk7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY3VycmVudCA9IHMucG9wKCk7XG4gICAgICAgICAgci5wdXNoKGN1cnJlbnQuZGF0YSk7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7XG4gICAgICAgIH0gZWxzZSB7IGRvbmUgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgbm9kZSBhdCBnaXZlbiBpbmRleFxuICAgKiBAcGFyYW17bnVtYmVyfSBpbmRleFxuICAgKiBAcmV0dXJuIHs/Tm9kZX1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBhdCAoaW5kZXgpIHtcbiAgICAvLyByZW1vdmVkIGFmdGVyIGEgY29uc2lkZXJhdGlvbiwgbW9yZSBtaXNsZWFkaW5nIHRoYW4gdXNlZnVsXG4gICAgLy8gaW5kZXggPSBpbmRleCAlIHRoaXMuc2l6ZTtcbiAgICAvLyBpZiAoaW5kZXggPCAwKSBpbmRleCA9IHRoaXMuc2l6ZSAtIGluZGV4O1xuXG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9yb290O1xuICAgIHZhciBzID0gW10sIGRvbmUgPSBmYWxzZSwgaSA9IDA7XG5cbiAgICB3aGlsZSAoIWRvbmUpIHtcbiAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgIHMucHVzaChjdXJyZW50KTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjdXJyZW50ID0gcy5wb3AoKTtcbiAgICAgICAgICBpZiAoaSA9PT0gaW5kZXgpIHsgcmV0dXJuIGN1cnJlbnQ7IH1cbiAgICAgICAgICBpKys7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7XG4gICAgICAgIH0gZWxzZSB7IGRvbmUgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCdWxrLWxvYWQgaXRlbXMuIEJvdGggYXJyYXkgaGF2ZSB0byBiZSBzYW1lIHNpemVcbiAgICogQHBhcmFte0FycmF5PEtleT59ICBrZXlzXG4gICAqIEBwYXJhbXtBcnJheTxWYWx1ZT59W3ZhbHVlc11cbiAgICogQHBhcmFte0Jvb2xlYW59ICAgICBbcHJlc29ydD1mYWxzZV0gUHJlLXNvcnQga2V5cyBhbmQgdmFsdWVzLCB1c2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUncyBjb21wYXJhdG9yLiBTb3J0aW5nIGlzIGRvbmVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi1wbGFjZVxuICAgKiBAcmV0dXJuIHtBVkxUcmVlfVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gbG9hZCAoa2V5cywgdmFsdWVzLCBwcmVzb3J0KSB7XG4gICAgICBpZiAoIGtleXMgPT09IHZvaWQgMCApIGtleXMgPSBbXTtcbiAgICAgIGlmICggdmFsdWVzID09PSB2b2lkIDAgKSB2YWx1ZXMgPSBbXTtcbiAgICAgIGlmICggcHJlc29ydCA9PT0gdm9pZCAwICkgcHJlc29ydCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX3NpemUgIT09IDApIHsgdGhyb3cgbmV3IEVycm9yKCdidWxrLWxvYWQ6IHRyZWUgaXMgbm90IGVtcHR5Jyk7IH1cbiAgICB2YXIgc2l6ZSA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChwcmVzb3J0KSB7IHNvcnQoa2V5cywgdmFsdWVzLCAwLCBzaXplIC0gMSwgdGhpcy5fY29tcGFyZSk7IH1cbiAgICB0aGlzLl9yb290ID0gbG9hZFJlY3Vyc2l2ZShudWxsLCBrZXlzLCB2YWx1ZXMsIDAsIHNpemUpO1xuICAgIHRoaXMuX3NpemUgPSBzaXplO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiBtaW4gKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5taW5Ob2RlKHRoaXMuX3Jvb3QpO1xuICAgIGlmIChub2RlKSB7IHJldHVybiBub2RlLmtleTsgfVxuICAgIGVsc2UgICAgeyByZXR1cm4gbnVsbDsgfVxuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5tYXggPSBmdW5jdGlvbiBtYXggKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5tYXhOb2RlKHRoaXMuX3Jvb3QpO1xuICAgIGlmIChub2RlKSB7IHJldHVybiBub2RlLmtleTsgfVxuICAgIGVsc2UgICAgeyByZXR1cm4gbnVsbDsgfVxuICB9O1xuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uIGlzRW1wdHkgKCkgeyByZXR1cm4gdGhpcy5fcm9vdCA9PT0gbnVsbDsgfTtcbiAgcHJvdG90eXBlQWNjZXNzb3JzLnNpemUuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2l6ZTsgfTtcblxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB0cmVlIGFuZCBsb2FkIGl0IHdpdGggaXRlbXNcbiAgICogQHBhcmFte0FycmF5PEtleT59ICAgICAgICBrZXlzXG4gICAqIEBwYXJhbXtBcnJheTxWYWx1ZT4/fSAgICAgIFt2YWx1ZXNdXG5cbiAgICogQHBhcmFte0Z1bmN0aW9uP30gICAgICAgICAgW2NvbXBhcmF0b3JdXG4gICAqIEBwYXJhbXtCb29sZWFuP30gICAgICAgICAgIFtwcmVzb3J0PWZhbHNlXSBQcmUtc29ydCBrZXlzIGFuZCB2YWx1ZXMsIHVzaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSdzIGNvbXBhcmF0b3IuIFNvcnRpbmcgaXMgZG9uZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLXBsYWNlXG4gICAqIEBwYXJhbXtCb29sZWFuP30gICAgICAgICAgIFtub0R1cGxpY2F0ZXM9ZmFsc2VdIEFsbG93IGR1cGxpY2F0ZXNcbiAgICogQHJldHVybiB7U3BsYXlUcmVlfVxuICAgKi9cbiAgU3BsYXlUcmVlLmNyZWF0ZVRyZWUgPSBmdW5jdGlvbiBjcmVhdGVUcmVlIChrZXlzLCB2YWx1ZXMsIGNvbXBhcmF0b3IsIHByZXNvcnQsIG5vRHVwbGljYXRlcykge1xuICAgIHJldHVybiBuZXcgU3BsYXlUcmVlKGNvbXBhcmF0b3IsIG5vRHVwbGljYXRlcykubG9hZChrZXlzLCB2YWx1ZXMsIHByZXNvcnQpO1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBTcGxheVRyZWUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxuXG4gIGZ1bmN0aW9uIGxvYWRSZWN1cnNpdmUgKHBhcmVudCwga2V5cywgdmFsdWVzLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHNpemUgPSBlbmQgLSBzdGFydDtcbiAgICBpZiAoc2l6ZSA+IDApIHtcbiAgICAgIHZhciBtaWRkbGUgPSBzdGFydCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpO1xuICAgICAgdmFyIGtleSAgICA9IGtleXNbbWlkZGxlXTtcbiAgICAgIHZhciBkYXRhICAgPSB2YWx1ZXNbbWlkZGxlXTtcbiAgICAgIHZhciBub2RlICAgPSB7IGtleToga2V5LCBkYXRhOiBkYXRhLCBwYXJlbnQ6IHBhcmVudCB9O1xuICAgICAgbm9kZS5sZWZ0ICAgID0gbG9hZFJlY3Vyc2l2ZShub2RlLCBrZXlzLCB2YWx1ZXMsIHN0YXJ0LCBtaWRkbGUpO1xuICAgICAgbm9kZS5yaWdodCAgID0gbG9hZFJlY3Vyc2l2ZShub2RlLCBrZXlzLCB2YWx1ZXMsIG1pZGRsZSArIDEsIGVuZCk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIHNvcnQoa2V5cywgdmFsdWVzLCBsZWZ0LCByaWdodCwgY29tcGFyZSkge1xuICAgIGlmIChsZWZ0ID49IHJpZ2h0KSB7IHJldHVybjsgfVxuXG4gICAgdmFyIHBpdm90ID0ga2V5c1sobGVmdCArIHJpZ2h0KSA+PiAxXTtcbiAgICB2YXIgaSA9IGxlZnQgLSAxO1xuICAgIHZhciBqID0gcmlnaHQgKyAxO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGRvIHsgaSsrOyB9IHdoaWxlIChjb21wYXJlKGtleXNbaV0sIHBpdm90KSA8IDApO1xuICAgICAgZG8geyBqLS07IH0gd2hpbGUgKGNvbXBhcmUoa2V5c1tqXSwgcGl2b3QpID4gMCk7XG4gICAgICBpZiAoaSA+PSBqKSB7IGJyZWFrOyB9XG5cbiAgICAgIHZhciB0bXAgPSBrZXlzW2ldO1xuICAgICAga2V5c1tpXSA9IGtleXNbal07XG4gICAgICBrZXlzW2pdID0gdG1wO1xuXG4gICAgICB0bXAgPSB2YWx1ZXNbaV07XG4gICAgICB2YWx1ZXNbaV0gPSB2YWx1ZXNbal07XG4gICAgICB2YWx1ZXNbal0gPSB0bXA7XG4gICAgfVxuXG4gICAgc29ydChrZXlzLCB2YWx1ZXMsICBsZWZ0LCAgICAgaiwgY29tcGFyZSk7XG4gICAgc29ydChrZXlzLCB2YWx1ZXMsIGogKyAxLCByaWdodCwgY29tcGFyZSk7XG4gIH1cblxuICB2YXIgTk9STUFMICAgICAgICAgICAgICAgPSAwO1xuICB2YXIgTk9OX0NPTlRSSUJVVElORyAgICAgPSAxO1xuICB2YXIgU0FNRV9UUkFOU0lUSU9OICAgICAgPSAyO1xuICB2YXIgRElGRkVSRU5UX1RSQU5TSVRJT04gPSAzO1xuXG4gIHZhciBJTlRFUlNFQ1RJT04gPSAwO1xuICB2YXIgVU5JT04gICAgICAgID0gMTtcbiAgdmFyIERJRkZFUkVOQ0UgICA9IDI7XG4gIHZhciBYT1IgICAgICAgICAgPSAzO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBldmVudFxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBwcmV2XG4gICAqIEBwYXJhbSAge09wZXJhdGlvbn0gb3BlcmF0aW9uXG4gICAqL1xuICBmdW5jdGlvbiBjb21wdXRlRmllbGRzIChldmVudCwgcHJldiwgb3BlcmF0aW9uKSB7XG4gICAgLy8gY29tcHV0ZSBpbk91dCBhbmQgb3RoZXJJbk91dCBmaWVsZHNcbiAgICBpZiAocHJldiA9PT0gbnVsbCkge1xuICAgICAgZXZlbnQuaW5PdXQgICAgICA9IGZhbHNlO1xuICAgICAgZXZlbnQub3RoZXJJbk91dCA9IHRydWU7XG5cbiAgICAvLyBwcmV2aW91cyBsaW5lIHNlZ21lbnQgaW4gc3dlZXBsaW5lIGJlbG9uZ3MgdG8gdGhlIHNhbWUgcG9seWdvblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXZlbnQuaXNTdWJqZWN0ID09PSBwcmV2LmlzU3ViamVjdCkge1xuICAgICAgICBldmVudC5pbk91dCAgICAgID0gIXByZXYuaW5PdXQ7XG4gICAgICAgIGV2ZW50Lm90aGVySW5PdXQgPSBwcmV2Lm90aGVySW5PdXQ7XG5cbiAgICAgIC8vIHByZXZpb3VzIGxpbmUgc2VnbWVudCBpbiBzd2VlcGxpbmUgYmVsb25ncyB0byB0aGUgY2xpcHBpbmcgcG9seWdvblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQuaW5PdXQgICAgICA9ICFwcmV2Lm90aGVySW5PdXQ7XG4gICAgICAgIGV2ZW50Lm90aGVySW5PdXQgPSBwcmV2LmlzVmVydGljYWwoKSA/ICFwcmV2LmluT3V0IDogcHJldi5pbk91dDtcbiAgICAgIH1cblxuICAgICAgLy8gY29tcHV0ZSBwcmV2SW5SZXN1bHQgZmllbGRcbiAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgIGV2ZW50LnByZXZJblJlc3VsdCA9ICghaW5SZXN1bHQocHJldiwgb3BlcmF0aW9uKSB8fCBwcmV2LmlzVmVydGljYWwoKSlcbiAgICAgICAgICA/IHByZXYucHJldkluUmVzdWx0IDogcHJldjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgbGluZSBzZWdtZW50IGJlbG9uZ3MgdG8gdGhlIEJvb2xlYW4gb3BlcmF0aW9uXG4gICAgZXZlbnQuaW5SZXN1bHQgPSBpblJlc3VsdChldmVudCwgb3BlcmF0aW9uKTtcbiAgfVxuXG5cbiAgLyogZXNsaW50LWRpc2FibGUgaW5kZW50ICovXG4gIGZ1bmN0aW9uIGluUmVzdWx0KGV2ZW50LCBvcGVyYXRpb24pIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgTk9STUFMOlxuICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgICAgIGNhc2UgSU5URVJTRUNUSU9OOlxuICAgICAgICAgICAgcmV0dXJuICFldmVudC5vdGhlckluT3V0O1xuICAgICAgICAgIGNhc2UgVU5JT046XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQub3RoZXJJbk91dDtcbiAgICAgICAgICBjYXNlIERJRkZFUkVOQ0U6XG4gICAgICAgICAgICAvLyByZXR1cm4gKGV2ZW50LmlzU3ViamVjdCAmJiAhZXZlbnQub3RoZXJJbk91dCkgfHxcbiAgICAgICAgICAgIC8vICAgICAgICAgKCFldmVudC5pc1N1YmplY3QgJiYgZXZlbnQub3RoZXJJbk91dCk7XG4gICAgICAgICAgICByZXR1cm4gKGV2ZW50LmlzU3ViamVjdCAmJiBldmVudC5vdGhlckluT3V0KSB8fFxuICAgICAgICAgICAgICAgICAgICAoIWV2ZW50LmlzU3ViamVjdCAmJiAhZXZlbnQub3RoZXJJbk91dCk7XG4gICAgICAgICAgY2FzZSBYT1I6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU0FNRV9UUkFOU0lUSU9OOlxuICAgICAgICByZXR1cm4gb3BlcmF0aW9uID09PSBJTlRFUlNFQ1RJT04gfHwgb3BlcmF0aW9uID09PSBVTklPTjtcbiAgICAgIGNhc2UgRElGRkVSRU5UX1RSQU5TSVRJT046XG4gICAgICAgIHJldHVybiBvcGVyYXRpb24gPT09IERJRkZFUkVOQ0U7XG4gICAgICBjYXNlIE5PTl9DT05UUklCVVRJTkc6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qIGVzbGludC1lbmFibGUgaW5kZW50ICovXG5cbiAgdmFyIFN3ZWVwRXZlbnQgPSBmdW5jdGlvbiBTd2VlcEV2ZW50IChwb2ludCwgbGVmdCwgb3RoZXJFdmVudCwgaXNTdWJqZWN0LCBlZGdlVHlwZSkge1xuXG4gICAgLyoqXG4gICAgICogSXMgbGVmdCBlbmRwb2ludD9cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0FycmF5LjxOdW1iZXI+fVxuICAgICAqL1xuICAgIHRoaXMucG9pbnQgPSBwb2ludDtcblxuICAgIC8qKlxuICAgICAqIE90aGVyIGVkZ2UgcmVmZXJlbmNlXG4gICAgICogQHR5cGUge1N3ZWVwRXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5vdGhlckV2ZW50ID0gb3RoZXJFdmVudDtcblxuICAgIC8qKlxuICAgICAqIEJlbG9uZ3MgdG8gc291cmNlIG9yIGNsaXBwaW5nIHBvbHlnb25cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzU3ViamVjdCA9IGlzU3ViamVjdDtcblxuICAgIC8qKlxuICAgICAqIEVkZ2UgY29udHJpYnV0aW9uIHR5cGVcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMudHlwZSA9IGVkZ2VUeXBlIHx8IE5PUk1BTDtcblxuXG4gICAgLyoqXG4gICAgICogSW4tb3V0IHRyYW5zaXRpb24gZm9yIHRoZSBzd2VlcGxpbmUgY3Jvc3NpbmcgcG9seWdvblxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaW5PdXQgPSBmYWxzZTtcblxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5vdGhlckluT3V0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2aW91cyBldmVudCBpbiByZXN1bHQ/XG4gICAgICogQHR5cGUge1N3ZWVwRXZlbnR9XG4gICAgICovXG4gICAgdGhpcy5wcmV2SW5SZXN1bHQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRG9lcyBldmVudCBiZWxvbmcgdG8gcmVzdWx0P1xuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuaW5SZXN1bHQgPSBmYWxzZTtcblxuXG4gICAgLy8gY29ubmVjdGlvbiBzdGVwXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3VsdEluT3V0ID0gZmFsc2U7XG5cbiAgICB0aGlzLmlzRXh0ZXJpb3JSaW5nID0gdHJ1ZTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBAcGFyYW17QXJyYXkuPE51bWJlcj59cFxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgU3dlZXBFdmVudC5wcm90b3R5cGUuaXNCZWxvdyA9IGZ1bmN0aW9uIGlzQmVsb3cgKHApIHtcbiAgICB2YXIgcDAgPSB0aGlzLnBvaW50LCBwMSA9IHRoaXMub3RoZXJFdmVudC5wb2ludDtcbiAgICByZXR1cm4gdGhpcy5sZWZ0XG4gICAgICA/IChwMFswXSAtIHBbMF0pICogKHAxWzFdIC0gcFsxXSkgLSAocDFbMF0gLSBwWzBdKSAqIChwMFsxXSAtIHBbMV0pID4gMFxuICAgICAgLy8gc2lnbmVkQXJlYSh0aGlzLnBvaW50LCB0aGlzLm90aGVyRXZlbnQucG9pbnQsIHApID4gMCA6XG4gICAgICA6IChwMVswXSAtIHBbMF0pICogKHAwWzFdIC0gcFsxXSkgLSAocDBbMF0gLSBwWzBdKSAqIChwMVsxXSAtIHBbMV0pID4gMDtcbiAgICAgIC8vc2lnbmVkQXJlYSh0aGlzLm90aGVyRXZlbnQucG9pbnQsIHRoaXMucG9pbnQsIHApID4gMDtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBAcGFyYW17QXJyYXkuPE51bWJlcj59cFxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgU3dlZXBFdmVudC5wcm90b3R5cGUuaXNBYm92ZSA9IGZ1bmN0aW9uIGlzQWJvdmUgKHApIHtcbiAgICByZXR1cm4gIXRoaXMuaXNCZWxvdyhwKTtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgU3dlZXBFdmVudC5wcm90b3R5cGUuaXNWZXJ0aWNhbCA9IGZ1bmN0aW9uIGlzVmVydGljYWwgKCkge1xuICAgIHJldHVybiB0aGlzLnBvaW50WzBdID09PSB0aGlzLm90aGVyRXZlbnQucG9pbnRbMF07XG4gIH07XG5cblxuICBTd2VlcEV2ZW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lICgpIHtcbiAgICB2YXIgY29weSA9IG5ldyBTd2VlcEV2ZW50KFxuICAgICAgdGhpcy5wb2ludCwgdGhpcy5sZWZ0LCB0aGlzLm90aGVyRXZlbnQsIHRoaXMuaXNTdWJqZWN0LCB0aGlzLnR5cGUpO1xuXG4gICAgY29weS5pblJlc3VsdCAgICAgPSB0aGlzLmluUmVzdWx0O1xuICAgIGNvcHkucHJldkluUmVzdWx0ID0gdGhpcy5wcmV2SW5SZXN1bHQ7XG4gICAgY29weS5pc0V4dGVyaW9yUmluZyA9IHRoaXMuaXNFeHRlcmlvclJpbmc7XG4gICAgY29weS5pbk91dCAgICAgICAgPSB0aGlzLmluT3V0O1xuICAgIGNvcHkub3RoZXJJbk91dCAgID0gdGhpcy5vdGhlckluT3V0O1xuXG4gICAgcmV0dXJuIGNvcHk7XG4gIH07XG5cbiAgZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAgIGlmIChwMVswXSA9PT0gcDJbMF0pIHtcbiAgICAgIGlmIChwMVsxXSA9PT0gcDJbMV0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGNvbnN0IEVQU0lMT04gPSAxZS05O1xuICAvLyBjb25zdCBhYnMgPSBNYXRoLmFicztcbiAgLy8gVE9ETyBodHRwczovL2dpdGh1Yi5jb20vdzhyL21hcnRpbmV6L2lzc3Vlcy82I2lzc3VlY29tbWVudC0yNjI4NDcxNjRcbiAgLy8gUHJlY2lzaW9uIHByb2JsZW0uXG4gIC8vXG4gIC8vIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXF1YWxzKHAxLCBwMikge1xuICAvLyAgIHJldHVybiBhYnMocDFbMF0gLSBwMlswXSkgPD0gRVBTSUxPTiAmJiBhYnMocDFbMV0gLSBwMlsxXSkgPD0gRVBTSUxPTjtcbiAgLy8gfTtcblxuICAvKipcbiAgICogU2lnbmVkIGFyZWEgb2YgdGhlIHRyaWFuZ2xlIChwMCwgcDEsIHAyKVxuICAgKiBAcGFyYW0gIHtBcnJheS48TnVtYmVyPn0gcDBcbiAgICogQHBhcmFtICB7QXJyYXkuPE51bWJlcj59IHAxXG4gICAqIEBwYXJhbSAge0FycmF5LjxOdW1iZXI+fSBwMlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBzaWduZWRBcmVhKHAwLCBwMSwgcDIpIHtcbiAgICByZXR1cm4gKHAwWzBdIC0gcDJbMF0pICogKHAxWzFdIC0gcDJbMV0pIC0gKHAxWzBdIC0gcDJbMF0pICogKHAwWzFdIC0gcDJbMV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IGUxXG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IGUyXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVFdmVudHMoZTEsIGUyKSB7XG4gICAgdmFyIHAxID0gZTEucG9pbnQ7XG4gICAgdmFyIHAyID0gZTIucG9pbnQ7XG5cbiAgICAvLyBEaWZmZXJlbnQgeC1jb29yZGluYXRlXG4gICAgaWYgKHAxWzBdID4gcDJbMF0pIHsgcmV0dXJuIDE7IH1cbiAgICBpZiAocDFbMF0gPCBwMlswXSkgeyByZXR1cm4gLTE7IH1cblxuICAgIC8vIERpZmZlcmVudCBwb2ludHMsIGJ1dCBzYW1lIHgtY29vcmRpbmF0ZVxuICAgIC8vIEV2ZW50IHdpdGggbG93ZXIgeS1jb29yZGluYXRlIGlzIHByb2Nlc3NlZCBmaXJzdFxuICAgIGlmIChwMVsxXSAhPT0gcDJbMV0pIHsgcmV0dXJuIHAxWzFdID4gcDJbMV0gPyAxIDogLTE7IH1cblxuICAgIHJldHVybiBzcGVjaWFsQ2FzZXMoZTEsIGUyLCBwMSwgcDIpO1xuICB9XG5cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICBmdW5jdGlvbiBzcGVjaWFsQ2FzZXMoZTEsIGUyLCBwMSwgcDIpIHtcbiAgICAvLyBTYW1lIGNvb3JkaW5hdGVzLCBidXQgb25lIGlzIGEgbGVmdCBlbmRwb2ludCBhbmQgdGhlIG90aGVyIGlzXG4gICAgLy8gYSByaWdodCBlbmRwb2ludC4gVGhlIHJpZ2h0IGVuZHBvaW50IGlzIHByb2Nlc3NlZCBmaXJzdFxuICAgIGlmIChlMS5sZWZ0ICE9PSBlMi5sZWZ0KVxuICAgICAgeyByZXR1cm4gZTEubGVmdCA/IDEgOiAtMTsgfVxuXG4gICAgLy8gY29uc3QgcDIgPSBlMS5vdGhlckV2ZW50LnBvaW50LCBwMyA9IGUyLm90aGVyRXZlbnQucG9pbnQ7XG4gICAgLy8gY29uc3Qgc2EgPSAocDFbMF0gLSBwM1swXSkgKiAocDJbMV0gLSBwM1sxXSkgLSAocDJbMF0gLSBwM1swXSkgKiAocDFbMV0gLSBwM1sxXSlcbiAgICAvLyBTYW1lIGNvb3JkaW5hdGVzLCBib3RoIGV2ZW50c1xuICAgIC8vIGFyZSBsZWZ0IGVuZHBvaW50cyBvciByaWdodCBlbmRwb2ludHMuXG4gICAgLy8gbm90IGNvbGxpbmVhclxuICAgIGlmIChzaWduZWRBcmVhKHAxLCBlMS5vdGhlckV2ZW50LnBvaW50LCBlMi5vdGhlckV2ZW50LnBvaW50KSAhPT0gMCkge1xuICAgICAgLy8gdGhlIGV2ZW50IGFzc29jaWF0ZSB0byB0aGUgYm90dG9tIHNlZ21lbnQgaXMgcHJvY2Vzc2VkIGZpcnN0XG4gICAgICByZXR1cm4gKCFlMS5pc0JlbG93KGUyLm90aGVyRXZlbnQucG9pbnQpKSA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFlMS5pc1N1YmplY3QgJiYgZTIuaXNTdWJqZWN0KSA/IDEgOiAtMTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbiAgLyoqXG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IHNlXG4gICAqIEBwYXJhbSAge0FycmF5LjxOdW1iZXI+fSBwXG4gICAqIEBwYXJhbSAge1F1ZXVlfSBxdWV1ZVxuICAgKiBAcmV0dXJuIHtRdWV1ZX1cbiAgICovXG4gIGZ1bmN0aW9uIGRpdmlkZVNlZ21lbnQoc2UsIHAsIHF1ZXVlKSAge1xuICAgIHZhciByID0gbmV3IFN3ZWVwRXZlbnQocCwgZmFsc2UsIHNlLCAgICAgICAgICAgIHNlLmlzU3ViamVjdCk7XG4gICAgdmFyIGwgPSBuZXcgU3dlZXBFdmVudChwLCB0cnVlLCAgc2Uub3RoZXJFdmVudCwgc2UuaXNTdWJqZWN0KTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICBpZiAoZXF1YWxzKHNlLnBvaW50LCBzZS5vdGhlckV2ZW50LnBvaW50KSkge1xuXG4gICAgICBjb25zb2xlLndhcm4oJ3doYXQgaXMgdGhhdCwgYSBjb2xsYXBzZWQgc2VnbWVudD8nLCBzZSk7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuXG4gICAgci5jb250b3VySWQgPSBsLmNvbnRvdXJJZCA9IHNlLmNvbnRvdXJJZDtcblxuICAgIC8vIGF2b2lkIGEgcm91bmRpbmcgZXJyb3IuIFRoZSBsZWZ0IGV2ZW50IHdvdWxkIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgcmlnaHQgZXZlbnRcbiAgICBpZiAoY29tcGFyZUV2ZW50cyhsLCBzZS5vdGhlckV2ZW50KSA+IDApIHtcbiAgICAgIHNlLm90aGVyRXZlbnQubGVmdCA9IHRydWU7XG4gICAgICBsLmxlZnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBhdm9pZCBhIHJvdW5kaW5nIGVycm9yLiBUaGUgbGVmdCBldmVudCB3b3VsZCBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHJpZ2h0IGV2ZW50XG4gICAgLy8gaWYgKGNvbXBhcmVFdmVudHMoc2UsIHIpID4gMCkge31cblxuICAgIHNlLm90aGVyRXZlbnQub3RoZXJFdmVudCA9IGw7XG4gICAgc2Uub3RoZXJFdmVudCA9IHI7XG5cbiAgICBxdWV1ZS5wdXNoKGwpO1xuICAgIHF1ZXVlLnB1c2gocik7XG5cbiAgICByZXR1cm4gcXVldWU7XG4gIH1cblxuICAvL2NvbnN0IEVQUyA9IDFlLTk7XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMgKGlmIHdlIHByZXRlbmRcbiAgICogdGhleSdyZSBpbiB0aHJlZSBkaW1lbnNpb25zKVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYSBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGIgU2Vjb25kIHZlY3RvclxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbWFnbml0dWRlIG9mIHRoZSBjcm9zcyBwcm9kdWN0XG4gICAqL1xuICBmdW5jdGlvbiBjcm9zc1Byb2R1Y3QoYSwgYikge1xuICAgIHJldHVybiAoYVswXSAqIGJbMV0pIC0gKGFbMV0gKiBiWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhIEZpcnN0IHZlY3RvclxuICAgKiBAcGFyYW0ge09iamVjdH0gYiBTZWNvbmQgdmVjdG9yXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBkb3QgcHJvZHVjdFxuICAgKi9cbiAgZnVuY3Rpb24gZG90UHJvZHVjdChhLCBiKSB7XG4gICAgcmV0dXJuIChhWzBdICogYlswXSkgKyAoYVsxXSAqIGJbMV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBpbnRlcnNlY3Rpb24gKGlmIGFueSkgYmV0d2VlbiB0d28gbGluZSBzZWdtZW50cyBhIGFuZCBiLCBnaXZlbiB0aGVcbiAgICogbGluZSBzZWdtZW50cycgZW5kIHBvaW50cyBhMSwgYTIgYW5kIGIxLCBiMi5cbiAgICpcbiAgICogVGhpcyBhbGdvcml0aG0gaXMgYmFzZWQgb24gU2NobmVpZGVyIGFuZCBFYmVybHkuXG4gICAqIGh0dHA6Ly93d3cuY2ltZWMub3JnLmFyL35uY2Fsdm8vU2NobmVpZGVyX0ViZXJseS5wZGZcbiAgICogUGFnZSAyNDQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkuPE51bWJlcj59IGExIHBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICogQHBhcmFtIHtBcnJheS48TnVtYmVyPn0gYTIgcG9pbnQgb2YgZmlyc3QgbGluZVxuICAgKiBAcGFyYW0ge0FycmF5LjxOdW1iZXI+fSBiMSBwb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiBAcGFyYW0ge0FycmF5LjxOdW1iZXI+fSBiMiBwb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiBAcGFyYW0ge0Jvb2xlYW49fSAgICAgICBub0VuZHBvaW50VG91Y2ggd2hldGhlciB0byBza2lwIHNpbmdsZSB0b3VjaHBvaW50c1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1lYW5pbmcgY29ubmVjdGVkIHNlZ21lbnRzKSBhc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uc1xuICAgKiBAcmV0dXJucyB7QXJyYXkuPEFycmF5LjxOdW1iZXI+PnxOdWxsfSBJZiB0aGUgbGluZXMgaW50ZXJzZWN0LCB0aGUgcG9pbnQgb2ZcbiAgICogaW50ZXJzZWN0aW9uLiBJZiB0aGV5IG92ZXJsYXAsIHRoZSB0d28gZW5kIHBvaW50cyBvZiB0aGUgb3ZlcmxhcHBpbmcgc2VnbWVudC5cbiAgICogT3RoZXJ3aXNlLCBudWxsLlxuICAgKi9cbiAgZnVuY3Rpb24gaW50ZXJzZWN0aW9uIChhMSwgYTIsIGIxLCBiMiwgbm9FbmRwb2ludFRvdWNoKSB7XG4gICAgLy8gVGhlIGFsZ29yaXRobSBleHBlY3RzIG91ciBsaW5lcyBpbiB0aGUgZm9ybSBQICsgc2QsIHdoZXJlIFAgaXMgYSBwb2ludCxcbiAgICAvLyBzIGlzIG9uIHRoZSBpbnRlcnZhbCBbMCwgMV0sIGFuZCBkIGlzIGEgdmVjdG9yLlxuICAgIC8vIFdlIGFyZSBwYXNzZWQgdHdvIHBvaW50cy4gUCBjYW4gYmUgdGhlIGZpcnN0IHBvaW50IG9mIGVhY2ggcGFpci4gVGhlXG4gICAgLy8gdmVjdG9yLCB0aGVuLCBjb3VsZCBiZSB0aG91Z2h0IG9mIGFzIHRoZSBkaXN0YW5jZSAoaW4geCBhbmQgeSBjb21wb25lbnRzKVxuICAgIC8vIGZyb20gdGhlIGZpcnN0IHBvaW50IHRvIHRoZSBzZWNvbmQgcG9pbnQuXG4gICAgLy8gU28gZmlyc3QsIGxldCdzIG1ha2Ugb3VyIHZlY3RvcnM6XG4gICAgdmFyIHZhID0gW2EyWzBdIC0gYTFbMF0sIGEyWzFdIC0gYTFbMV1dO1xuICAgIHZhciB2YiA9IFtiMlswXSAtIGIxWzBdLCBiMlsxXSAtIGIxWzFdXTtcbiAgICAvLyBXZSBhbHNvIGRlZmluZSBhIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYmFjayB0byByZWd1bGFyIHBvaW50IGZvcm06XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBhcnJvdy1ib2R5LXN0eWxlICovXG5cbiAgICBmdW5jdGlvbiB0b1BvaW50KHAsIHMsIGQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHBbMF0gKyBzICogZFswXSxcbiAgICAgICAgcFsxXSArIHMgKiBkWzFdXG4gICAgICBdO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1lbmFibGUgYXJyb3ctYm9keS1zdHlsZSAqL1xuXG4gICAgLy8gVGhlIHJlc3QgaXMgcHJldHR5IG11Y2ggYSBzdHJhaWdodCBwb3J0IG9mIHRoZSBhbGdvcml0aG0uXG4gICAgdmFyIGUgPSBbYjFbMF0gLSBhMVswXSwgYjFbMV0gLSBhMVsxXV07XG4gICAgdmFyIGtyb3NzICAgID0gY3Jvc3NQcm9kdWN0KHZhLCB2Yik7XG4gICAgdmFyIHNxcktyb3NzID0ga3Jvc3MgKiBrcm9zcztcbiAgICB2YXIgc3FyTGVuQSAgPSBkb3RQcm9kdWN0KHZhLCB2YSk7XG4gICAgLy9jb25zdCBzcXJMZW5CICA9IGRvdFByb2R1Y3QodmIsIHZiKTtcblxuICAgIC8vIENoZWNrIGZvciBsaW5lIGludGVyc2VjdGlvbi4gVGhpcyB3b3JrcyBiZWNhdXNlIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZVxuICAgIC8vIGNyb3NzIHByb2R1Y3QgLS0gc3BlY2lmaWNhbGx5LCB0d28gdmVjdG9ycyBhcmUgcGFyYWxsZWwgaWYgYW5kIG9ubHkgaWYgdGhlXG4gICAgLy8gY3Jvc3MgcHJvZHVjdCBpcyB0aGUgMCB2ZWN0b3IuIFRoZSBmdWxsIGNhbGN1bGF0aW9uIGludm9sdmVzIHJlbGF0aXZlIGVycm9yXG4gICAgLy8gdG8gYWNjb3VudCBmb3IgcG9zc2libGUgdmVyeSBzbWFsbCBsaW5lIHNlZ21lbnRzLiBTZWUgU2NobmVpZGVyICYgRWJlcmx5XG4gICAgLy8gZm9yIGRldGFpbHMuXG4gICAgaWYgKHNxcktyb3NzID4gMC8qIEVQUyAqIHNxckxlbkIgKiBzcUxlbkEgKi8pIHtcbiAgICAgIC8vIElmIHRoZXkncmUgbm90IHBhcmFsbGVsLCB0aGVuIChiZWNhdXNlIHRoZXNlIGFyZSBsaW5lIHNlZ21lbnRzKSB0aGV5XG4gICAgICAvLyBzdGlsbCBtaWdodCBub3QgYWN0dWFsbHkgaW50ZXJzZWN0LiBUaGlzIGNvZGUgY2hlY2tzIHRoYXQgdGhlXG4gICAgICAvLyBpbnRlcnNlY3Rpb24gcG9pbnQgb2YgdGhlIGxpbmVzIGlzIGFjdHVhbGx5IG9uIGJvdGggbGluZSBzZWdtZW50cy5cbiAgICAgIHZhciBzID0gY3Jvc3NQcm9kdWN0KGUsIHZiKSAvIGtyb3NzO1xuICAgICAgaWYgKHMgPCAwIHx8IHMgPiAxKSB7XG4gICAgICAgIC8vIG5vdCBvbiBsaW5lIHNlZ21lbnQgYVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHZhciB0ID0gY3Jvc3NQcm9kdWN0KGUsIHZhKSAvIGtyb3NzO1xuICAgICAgaWYgKHQgPCAwIHx8IHQgPiAxKSB7XG4gICAgICAgIC8vIG5vdCBvbiBsaW5lIHNlZ21lbnQgYlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzID09PSAwIHx8IHMgPT09IDEpIHtcbiAgICAgICAgLy8gb24gYW4gZW5kcG9pbnQgb2YgbGluZSBzZWdtZW50IGFcbiAgICAgICAgcmV0dXJuIG5vRW5kcG9pbnRUb3VjaCA/IG51bGwgOiBbdG9Qb2ludChhMSwgcywgdmEpXTtcbiAgICAgIH1cbiAgICAgIGlmICh0ID09PSAwIHx8IHQgPT09IDEpIHtcbiAgICAgICAgLy8gb24gYW4gZW5kcG9pbnQgb2YgbGluZSBzZWdtZW50IGJcbiAgICAgICAgcmV0dXJuIG5vRW5kcG9pbnRUb3VjaCA/IG51bGwgOiBbdG9Qb2ludChiMSwgdCwgdmIpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdG9Qb2ludChhMSwgcywgdmEpXTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSd2ZSByZWFjaGVkIHRoaXMgcG9pbnQsIHRoZW4gdGhlIGxpbmVzIGFyZSBlaXRoZXIgcGFyYWxsZWwgb3IgdGhlXG4gICAgLy8gc2FtZSwgYnV0IHRoZSBzZWdtZW50cyBjb3VsZCBvdmVybGFwIHBhcnRpYWxseSBvciBmdWxseSwgb3Igbm90IGF0IGFsbC5cbiAgICAvLyBTbyB3ZSBuZWVkIHRvIGZpbmQgdGhlIG92ZXJsYXAsIGlmIGFueS4gVG8gZG8gdGhhdCwgd2UgY2FuIHVzZSBlLCB3aGljaCBpc1xuICAgIC8vIHRoZSAodmVjdG9yKSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBpbml0aWFsIHBvaW50cy4gSWYgdGhpcyBpcyBwYXJhbGxlbFxuICAgIC8vIHdpdGggdGhlIGxpbmUgaXRzZWxmLCB0aGVuIHRoZSB0d28gbGluZXMgYXJlIHRoZSBzYW1lIGxpbmUsIGFuZCB0aGVyZSB3aWxsXG4gICAgLy8gYmUgb3ZlcmxhcC5cbiAgICAvL2NvbnN0IHNxckxlbkUgPSBkb3RQcm9kdWN0KGUsIGUpO1xuICAgIGtyb3NzID0gY3Jvc3NQcm9kdWN0KGUsIHZhKTtcbiAgICBzcXJLcm9zcyA9IGtyb3NzICoga3Jvc3M7XG5cbiAgICBpZiAoc3FyS3Jvc3MgPiAwIC8qIEVQUyAqIHNxTGVuQiAqIHNxTGVuRSAqLykge1xuICAgIC8vIExpbmVzIGFyZSBqdXN0IHBhcmFsbGVsLCBub3QgdGhlIHNhbWUuIE5vIG92ZXJsYXAuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgc2EgPSBkb3RQcm9kdWN0KHZhLCBlKSAvIHNxckxlbkE7XG4gICAgdmFyIHNiID0gc2EgKyBkb3RQcm9kdWN0KHZhLCB2YikgLyBzcXJMZW5BO1xuICAgIHZhciBzbWluID0gTWF0aC5taW4oc2EsIHNiKTtcbiAgICB2YXIgc21heCA9IE1hdGgubWF4KHNhLCBzYik7XG5cbiAgICAvLyB0aGlzIGlzLCBlc3NlbnRpYWxseSwgdGhlIEZpbmRJbnRlcnNlY3Rpb24gYWN0aW5nIG9uIGZsb2F0cyBmcm9tXG4gICAgLy8gU2NobmVpZGVyICYgRWJlcmx5LCBqdXN0IGlubGluZWQgaW50byB0aGlzIGZ1bmN0aW9uLlxuICAgIGlmIChzbWluIDw9IDEgJiYgc21heCA+PSAwKSB7XG5cbiAgICAgIC8vIG92ZXJsYXAgb24gYW4gZW5kIHBvaW50XG4gICAgICBpZiAoc21pbiA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbm9FbmRwb2ludFRvdWNoID8gbnVsbCA6IFt0b1BvaW50KGExLCBzbWluID4gMCA/IHNtaW4gOiAwLCB2YSldO1xuICAgICAgfVxuXG4gICAgICBpZiAoc21heCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbm9FbmRwb2ludFRvdWNoID8gbnVsbCA6IFt0b1BvaW50KGExLCBzbWF4IDwgMSA/IHNtYXggOiAxLCB2YSldO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9FbmRwb2ludFRvdWNoICYmIHNtaW4gPT09IDAgJiYgc21heCA9PT0gMSkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAvLyBUaGVyZSdzIG92ZXJsYXAgb24gYSBzZWdtZW50IC0tIHR3byBwb2ludHMgb2YgaW50ZXJzZWN0aW9uLiBSZXR1cm4gYm90aC5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRvUG9pbnQoYTEsIHNtaW4gPiAwID8gc21pbiA6IDAsIHZhKSxcbiAgICAgICAgdG9Qb2ludChhMSwgc21heCA8IDEgPyBzbWF4IDogMSwgdmEpXG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IHNlMVxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBzZTJcbiAgICogQHBhcmFtICB7UXVldWV9ICAgICAgcXVldWVcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gcG9zc2libGVJbnRlcnNlY3Rpb24gKHNlMSwgc2UyLCBxdWV1ZSkge1xuICAgIC8vIHRoYXQgZGlzYWxsb3dzIHNlbGYtaW50ZXJzZWN0aW5nIHBvbHlnb25zLFxuICAgIC8vIGRpZCBjb3N0IHVzIGhhbGYgYSBkYXksIHNvIEknbGwgbGVhdmUgaXRcbiAgICAvLyBvdXQgb2YgcmVzcGVjdFxuICAgIC8vIGlmIChzZTEuaXNTdWJqZWN0ID09PSBzZTIuaXNTdWJqZWN0KSByZXR1cm47XG4gICAgdmFyIGludGVyID0gaW50ZXJzZWN0aW9uKFxuICAgICAgc2UxLnBvaW50LCBzZTEub3RoZXJFdmVudC5wb2ludCxcbiAgICAgIHNlMi5wb2ludCwgc2UyLm90aGVyRXZlbnQucG9pbnRcbiAgICApO1xuXG4gICAgdmFyIG5pbnRlcnNlY3Rpb25zID0gaW50ZXIgPyBpbnRlci5sZW5ndGggOiAwO1xuICAgIGlmIChuaW50ZXJzZWN0aW9ucyA9PT0gMCkgeyByZXR1cm4gMDsgfSAvLyBubyBpbnRlcnNlY3Rpb25cblxuICAgIC8vIHRoZSBsaW5lIHNlZ21lbnRzIGludGVyc2VjdCBhdCBhbiBlbmRwb2ludCBvZiBib3RoIGxpbmUgc2VnbWVudHNcbiAgICBpZiAoKG5pbnRlcnNlY3Rpb25zID09PSAxKSAmJlxuICAgICAgICAoZXF1YWxzKHNlMS5wb2ludCwgc2UyLnBvaW50KSB8fFxuICAgICAgICAgZXF1YWxzKHNlMS5vdGhlckV2ZW50LnBvaW50LCBzZTIub3RoZXJFdmVudC5wb2ludCkpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAobmludGVyc2VjdGlvbnMgPT09IDIgJiYgc2UxLmlzU3ViamVjdCA9PT0gc2UyLmlzU3ViamVjdCkge1xuICAgICAgLy8gaWYoc2UxLmNvbnRvdXJJZCA9PT0gc2UyLmNvbnRvdXJJZCl7XG4gICAgICAvLyBjb25zb2xlLndhcm4oJ0VkZ2VzIG9mIHRoZSBzYW1lIHBvbHlnb24gb3ZlcmxhcCcsXG4gICAgICAvLyAgIHNlMS5wb2ludCwgc2UxLm90aGVyRXZlbnQucG9pbnQsIHNlMi5wb2ludCwgc2UyLm90aGVyRXZlbnQucG9pbnQpO1xuICAgICAgLy8gfVxuICAgICAgLy90aHJvdyBuZXcgRXJyb3IoJ0VkZ2VzIG9mIHRoZSBzYW1lIHBvbHlnb24gb3ZlcmxhcCcpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gVGhlIGxpbmUgc2VnbWVudHMgYXNzb2NpYXRlZCB0byBzZTEgYW5kIHNlMiBpbnRlcnNlY3RcbiAgICBpZiAobmludGVyc2VjdGlvbnMgPT09IDEpIHtcblxuICAgICAgLy8gaWYgdGhlIGludGVyc2VjdGlvbiBwb2ludCBpcyBub3QgYW4gZW5kcG9pbnQgb2Ygc2UxXG4gICAgICBpZiAoIWVxdWFscyhzZTEucG9pbnQsIGludGVyWzBdKSAmJiAhZXF1YWxzKHNlMS5vdGhlckV2ZW50LnBvaW50LCBpbnRlclswXSkpIHtcbiAgICAgICAgZGl2aWRlU2VnbWVudChzZTEsIGludGVyWzBdLCBxdWV1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgaXMgbm90IGFuIGVuZHBvaW50IG9mIHNlMlxuICAgICAgaWYgKCFlcXVhbHMoc2UyLnBvaW50LCBpbnRlclswXSkgJiYgIWVxdWFscyhzZTIub3RoZXJFdmVudC5wb2ludCwgaW50ZXJbMF0pKSB7XG4gICAgICAgIGRpdmlkZVNlZ21lbnQoc2UyLCBpbnRlclswXSwgcXVldWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgLy8gVGhlIGxpbmUgc2VnbWVudHMgYXNzb2NpYXRlZCB0byBzZTEgYW5kIHNlMiBvdmVybGFwXG4gICAgdmFyIGV2ZW50cyAgICAgICAgPSBbXTtcbiAgICB2YXIgbGVmdENvaW5jaWRlICA9IGZhbHNlO1xuICAgIHZhciByaWdodENvaW5jaWRlID0gZmFsc2U7XG5cbiAgICBpZiAoZXF1YWxzKHNlMS5wb2ludCwgc2UyLnBvaW50KSkge1xuICAgICAgbGVmdENvaW5jaWRlID0gdHJ1ZTsgLy8gbGlua2VkXG4gICAgfSBlbHNlIGlmIChjb21wYXJlRXZlbnRzKHNlMSwgc2UyKSA9PT0gMSkge1xuICAgICAgZXZlbnRzLnB1c2goc2UyLCBzZTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudHMucHVzaChzZTEsIHNlMik7XG4gICAgfVxuXG4gICAgaWYgKGVxdWFscyhzZTEub3RoZXJFdmVudC5wb2ludCwgc2UyLm90aGVyRXZlbnQucG9pbnQpKSB7XG4gICAgICByaWdodENvaW5jaWRlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGNvbXBhcmVFdmVudHMoc2UxLm90aGVyRXZlbnQsIHNlMi5vdGhlckV2ZW50KSA9PT0gMSkge1xuICAgICAgZXZlbnRzLnB1c2goc2UyLm90aGVyRXZlbnQsIHNlMS5vdGhlckV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzLnB1c2goc2UxLm90aGVyRXZlbnQsIHNlMi5vdGhlckV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoKGxlZnRDb2luY2lkZSAmJiByaWdodENvaW5jaWRlKSB8fCBsZWZ0Q29pbmNpZGUpIHtcbiAgICAgIC8vIGJvdGggbGluZSBzZWdtZW50cyBhcmUgZXF1YWwgb3Igc2hhcmUgdGhlIGxlZnQgZW5kcG9pbnRcbiAgICAgIHNlMi50eXBlID0gTk9OX0NPTlRSSUJVVElORztcbiAgICAgIHNlMS50eXBlID0gKHNlMi5pbk91dCA9PT0gc2UxLmluT3V0KVxuICAgICAgICA/IFNBTUVfVFJBTlNJVElPTiA6IERJRkZFUkVOVF9UUkFOU0lUSU9OO1xuXG4gICAgICBpZiAobGVmdENvaW5jaWRlICYmICFyaWdodENvaW5jaWRlKSB7XG4gICAgICAgIC8vIGhvbmVzdGx5IG5vIGlkZWEsIGJ1dCBjaGFuZ2luZyBldmVudHMgc2VsZWN0aW9uIGZyb20gWzIsIDFdXG4gICAgICAgIC8vIHRvIFswLCAxXSBmaXhlcyB0aGUgb3ZlcmxhcHBpbmcgc2VsZi1pbnRlcnNlY3RpbmcgcG9seWdvbnMgaXNzdWVcbiAgICAgICAgZGl2aWRlU2VnbWVudChldmVudHNbMV0ub3RoZXJFdmVudCwgZXZlbnRzWzBdLnBvaW50LCBxdWV1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG5cbiAgICAvLyB0aGUgbGluZSBzZWdtZW50cyBzaGFyZSB0aGUgcmlnaHQgZW5kcG9pbnRcbiAgICBpZiAocmlnaHRDb2luY2lkZSkge1xuICAgICAgZGl2aWRlU2VnbWVudChldmVudHNbMF0sIGV2ZW50c1sxXS5wb2ludCwgcXVldWUpO1xuICAgICAgcmV0dXJuIDM7XG4gICAgfVxuXG4gICAgLy8gbm8gbGluZSBzZWdtZW50IGluY2x1ZGVzIHRvdGFsbHkgdGhlIG90aGVyIG9uZVxuICAgIGlmIChldmVudHNbMF0gIT09IGV2ZW50c1szXS5vdGhlckV2ZW50KSB7XG4gICAgICBkaXZpZGVTZWdtZW50KGV2ZW50c1swXSwgZXZlbnRzWzFdLnBvaW50LCBxdWV1ZSk7XG4gICAgICBkaXZpZGVTZWdtZW50KGV2ZW50c1sxXSwgZXZlbnRzWzJdLnBvaW50LCBxdWV1ZSk7XG4gICAgICByZXR1cm4gMztcbiAgICB9XG5cbiAgICAvLyBvbmUgbGluZSBzZWdtZW50IGluY2x1ZGVzIHRoZSBvdGhlciBvbmVcbiAgICBkaXZpZGVTZWdtZW50KGV2ZW50c1swXSwgZXZlbnRzWzFdLnBvaW50LCBxdWV1ZSk7XG4gICAgZGl2aWRlU2VnbWVudChldmVudHNbM10ub3RoZXJFdmVudCwgZXZlbnRzWzJdLnBvaW50LCBxdWV1ZSk7XG5cbiAgICByZXR1cm4gMztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBsZTFcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gbGUyXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGNvbXBhcmVTZWdtZW50cyhsZTEsIGxlMikge1xuICAgIGlmIChsZTEgPT09IGxlMikgeyByZXR1cm4gMDsgfVxuXG4gICAgLy8gU2VnbWVudHMgYXJlIG5vdCBjb2xsaW5lYXJcbiAgICBpZiAoc2lnbmVkQXJlYShsZTEucG9pbnQsIGxlMS5vdGhlckV2ZW50LnBvaW50LCBsZTIucG9pbnQpICE9PSAwIHx8XG4gICAgICBzaWduZWRBcmVhKGxlMS5wb2ludCwgbGUxLm90aGVyRXZlbnQucG9pbnQsIGxlMi5vdGhlckV2ZW50LnBvaW50KSAhPT0gMCkge1xuXG4gICAgICAvLyBJZiB0aGV5IHNoYXJlIHRoZWlyIGxlZnQgZW5kcG9pbnQgdXNlIHRoZSByaWdodCBlbmRwb2ludCB0byBzb3J0XG4gICAgICBpZiAoZXF1YWxzKGxlMS5wb2ludCwgbGUyLnBvaW50KSkgeyByZXR1cm4gbGUxLmlzQmVsb3cobGUyLm90aGVyRXZlbnQucG9pbnQpID8gLTEgOiAxOyB9XG5cbiAgICAgIC8vIERpZmZlcmVudCBsZWZ0IGVuZHBvaW50OiB1c2UgdGhlIGxlZnQgZW5kcG9pbnQgdG8gc29ydFxuICAgICAgaWYgKGxlMS5wb2ludFswXSA9PT0gbGUyLnBvaW50WzBdKSB7IHJldHVybiBsZTEucG9pbnRbMV0gPCBsZTIucG9pbnRbMV0gPyAtMSA6IDE7IH1cblxuICAgICAgLy8gaGFzIHRoZSBsaW5lIHNlZ21lbnQgYXNzb2NpYXRlZCB0byBlMSBiZWVuIGluc2VydGVkXG4gICAgICAvLyBpbnRvIFMgYWZ0ZXIgdGhlIGxpbmUgc2VnbWVudCBhc3NvY2lhdGVkIHRvIGUyID9cbiAgICAgIGlmIChjb21wYXJlRXZlbnRzKGxlMSwgbGUyKSA9PT0gMSkgeyByZXR1cm4gbGUyLmlzQWJvdmUobGUxLnBvaW50KSA/IC0xIDogMTsgfVxuXG4gICAgICAvLyBUaGUgbGluZSBzZWdtZW50IGFzc29jaWF0ZWQgdG8gZTIgaGFzIGJlZW4gaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gUyBhZnRlciB0aGUgbGluZSBzZWdtZW50IGFzc29jaWF0ZWQgdG8gZTFcbiAgICAgIHJldHVybiBsZTEuaXNCZWxvdyhsZTIucG9pbnQpID8gLTEgOiAxO1xuICAgIH1cblxuICAgIGlmIChsZTEuaXNTdWJqZWN0ID09PSBsZTIuaXNTdWJqZWN0KSB7IC8vIHNhbWUgcG9seWdvblxuICAgICAgdmFyIHAxID0gbGUxLnBvaW50LCBwMiA9IGxlMi5wb2ludDtcbiAgICAgIGlmIChwMVswXSA9PT0gcDJbMF0gJiYgcDFbMV0gPT09IHAyWzFdLyplcXVhbHMobGUxLnBvaW50LCBsZTIucG9pbnQpKi8pIHtcbiAgICAgICAgcDEgPSBsZTEub3RoZXJFdmVudC5wb2ludDsgcDIgPSBsZTIub3RoZXJFdmVudC5wb2ludDtcbiAgICAgICAgaWYgKHAxWzBdID09PSBwMlswXSAmJiBwMVsxXSA9PT0gcDJbMV0pIHsgcmV0dXJuIDA7IH1cbiAgICAgICAgZWxzZSB7IHJldHVybiBsZTEuY29udG91cklkID4gbGUyLmNvbnRvdXJJZCA/IDEgOiAtMTsgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIFNlZ21lbnRzIGFyZSBjb2xsaW5lYXIsIGJ1dCBiZWxvbmcgdG8gc2VwYXJhdGUgcG9seWdvbnNcbiAgICAgIHJldHVybiBsZTEuaXNTdWJqZWN0ID8gLTEgOiAxO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlRXZlbnRzKGxlMSwgbGUyKSA9PT0gMSA/IDEgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1YmRpdmlkZShldmVudFF1ZXVlLCBzdWJqZWN0LCBjbGlwcGluZywgc2Jib3gsIGNiYm94LCBvcGVyYXRpb24pIHtcbiAgICB2YXIgc3dlZXBMaW5lID0gbmV3IFNwbGF5VHJlZShjb21wYXJlU2VnbWVudHMpO1xuICAgIHZhciBzb3J0ZWRFdmVudHMgPSBbXTtcblxuICAgIHZhciByaWdodGJvdW5kID0gTWF0aC5taW4oc2Jib3hbMl0sIGNiYm94WzJdKTtcblxuICAgIHZhciBwcmV2LCBuZXh0LCBiZWdpbjtcblxuICAgIHdoaWxlIChldmVudFF1ZXVlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdmFyIGV2ZW50ID0gZXZlbnRRdWV1ZS5wb3AoKTtcbiAgICAgIHNvcnRlZEV2ZW50cy5wdXNoKGV2ZW50KTtcblxuICAgICAgLy8gb3B0aW1pemF0aW9uIGJ5IGJib3hlcyBmb3IgaW50ZXJzZWN0aW9uIGFuZCBkaWZmZXJlbmNlIGdvZXMgaGVyZVxuICAgICAgaWYgKChvcGVyYXRpb24gPT09IElOVEVSU0VDVElPTiAmJiBldmVudC5wb2ludFswXSA+IHJpZ2h0Ym91bmQpIHx8XG4gICAgICAgICAgKG9wZXJhdGlvbiA9PT0gRElGRkVSRU5DRSAgICYmIGV2ZW50LnBvaW50WzBdID4gc2Jib3hbMl0pKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQubGVmdCkge1xuICAgICAgICBuZXh0ICA9IHByZXYgPSBzd2VlcExpbmUuaW5zZXJ0KGV2ZW50KTtcbiAgICAgICAgYmVnaW4gPSBzd2VlcExpbmUubWluTm9kZSgpO1xuXG4gICAgICAgIGlmIChwcmV2ICE9PSBiZWdpbikgeyBwcmV2ID0gc3dlZXBMaW5lLnByZXYocHJldik7IH1cbiAgICAgICAgZWxzZSAgICAgICAgICAgICAgICB7IHByZXYgPSBudWxsOyB9XG5cbiAgICAgICAgbmV4dCA9IHN3ZWVwTGluZS5uZXh0KG5leHQpO1xuXG4gICAgICAgIHZhciBwcmV2RXZlbnQgPSBwcmV2ID8gcHJldi5rZXkgOiBudWxsO1xuICAgICAgICB2YXIgcHJldnByZXZFdmVudCA9ICh2b2lkIDApO1xuICAgICAgICBjb21wdXRlRmllbGRzKGV2ZW50LCBwcmV2RXZlbnQsIG9wZXJhdGlvbik7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgaWYgKHBvc3NpYmxlSW50ZXJzZWN0aW9uKGV2ZW50LCBuZXh0LmtleSwgZXZlbnRRdWV1ZSkgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbXB1dGVGaWVsZHMoZXZlbnQsIHByZXZFdmVudCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbXB1dGVGaWVsZHMoZXZlbnQsIG5leHQua2V5LCBvcGVyYXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgaWYgKHBvc3NpYmxlSW50ZXJzZWN0aW9uKHByZXYua2V5LCBldmVudCwgZXZlbnRRdWV1ZSkgPT09IDIpIHtcbiAgICAgICAgICAgIHZhciBwcmV2cHJldiA9IHByZXY7XG4gICAgICAgICAgICBpZiAocHJldnByZXYgIT09IGJlZ2luKSB7IHByZXZwcmV2ID0gc3dlZXBMaW5lLnByZXYocHJldnByZXYpOyB9XG4gICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICB7IHByZXZwcmV2ID0gbnVsbDsgfVxuXG4gICAgICAgICAgICBwcmV2cHJldkV2ZW50ID0gcHJldnByZXYgPyBwcmV2cHJldi5rZXkgOiBudWxsO1xuICAgICAgICAgICAgY29tcHV0ZUZpZWxkcyhwcmV2RXZlbnQsIHByZXZwcmV2RXZlbnQsIG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21wdXRlRmllbGRzKGV2ZW50LCAgICAgcHJldkV2ZW50LCAgICAgb3BlcmF0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50ID0gZXZlbnQub3RoZXJFdmVudDtcbiAgICAgICAgbmV4dCA9IHByZXYgPSBzd2VlcExpbmUuZmluZChldmVudCk7XG5cbiAgICAgICAgaWYgKHByZXYgJiYgbmV4dCkge1xuXG4gICAgICAgICAgaWYgKHByZXYgIT09IGJlZ2luKSB7IHByZXYgPSBzd2VlcExpbmUucHJldihwcmV2KTsgfVxuICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgeyBwcmV2ID0gbnVsbDsgfVxuXG4gICAgICAgICAgbmV4dCA9IHN3ZWVwTGluZS5uZXh0KG5leHQpO1xuICAgICAgICAgIHN3ZWVwTGluZS5yZW1vdmUoZXZlbnQpO1xuXG4gICAgICAgICAgaWYgKG5leHQgJiYgcHJldikge1xuICAgICAgICAgICAgcG9zc2libGVJbnRlcnNlY3Rpb24ocHJldi5rZXksIG5leHQua2V5LCBldmVudFF1ZXVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNvcnRlZEV2ZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtBcnJheS48U3dlZXBFdmVudD59IHNvcnRlZEV2ZW50c1xuICAgKiBAcmV0dXJuIHtBcnJheS48U3dlZXBFdmVudD59XG4gICAqL1xuICBmdW5jdGlvbiBvcmRlckV2ZW50cyhzb3J0ZWRFdmVudHMpIHtcbiAgICB2YXIgZXZlbnQsIGksIGxlbiwgdG1wO1xuICAgIHZhciByZXN1bHRFdmVudHMgPSBbXTtcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBzb3J0ZWRFdmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGV2ZW50ID0gc29ydGVkRXZlbnRzW2ldO1xuICAgICAgaWYgKChldmVudC5sZWZ0ICYmIGV2ZW50LmluUmVzdWx0KSB8fFxuICAgICAgICAoIWV2ZW50LmxlZnQgJiYgZXZlbnQub3RoZXJFdmVudC5pblJlc3VsdCkpIHtcbiAgICAgICAgcmVzdWx0RXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBEdWUgdG8gb3ZlcmxhcHBpbmcgZWRnZXMgdGhlIHJlc3VsdEV2ZW50cyBhcnJheSBjYW4gYmUgbm90IHdob2xseSBzb3J0ZWRcbiAgICB2YXIgc29ydGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKCFzb3J0ZWQpIHtcbiAgICAgIHNvcnRlZCA9IHRydWU7XG4gICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZXN1bHRFdmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKChpICsgMSkgPCBsZW4gJiZcbiAgICAgICAgICBjb21wYXJlRXZlbnRzKHJlc3VsdEV2ZW50c1tpXSwgcmVzdWx0RXZlbnRzW2kgKyAxXSkgPT09IDEpIHtcbiAgICAgICAgICB0bXAgPSByZXN1bHRFdmVudHNbaV07XG4gICAgICAgICAgcmVzdWx0RXZlbnRzW2ldID0gcmVzdWx0RXZlbnRzW2kgKyAxXTtcbiAgICAgICAgICByZXN1bHRFdmVudHNbaSArIDFdID0gdG1wO1xuICAgICAgICAgIHNvcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSByZXN1bHRFdmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGV2ZW50ID0gcmVzdWx0RXZlbnRzW2ldO1xuICAgICAgZXZlbnQucG9zID0gaTtcbiAgICB9XG5cbiAgICAvLyBpbWFnaW5lLCB0aGUgcmlnaHQgZXZlbnQgaXMgZm91bmQgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUsXG4gICAgLy8gd2hlbiBoaXMgbGVmdCBjb3VudGVycGFydCBpcyBub3QgbWFya2VkIHlldFxuICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlc3VsdEV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgZXZlbnQgPSByZXN1bHRFdmVudHNbaV07XG4gICAgICBpZiAoIWV2ZW50LmxlZnQpIHtcbiAgICAgICAgdG1wID0gZXZlbnQucG9zO1xuICAgICAgICBldmVudC5wb3MgPSBldmVudC5vdGhlckV2ZW50LnBvcztcbiAgICAgICAgZXZlbnQub3RoZXJFdmVudC5wb3MgPSB0bXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdEV2ZW50cztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBwYXJhbSAge051bWJlcn0gcG9zXG4gICAqIEBwYXJhbSAge0FycmF5LjxTd2VlcEV2ZW50Pn0gcmVzdWx0RXZlbnRzXG4gICAqIEBwYXJhbSAge09iamVjdD59ICAgIHByb2Nlc3NlZFxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBuZXh0UG9zKHBvcywgcmVzdWx0RXZlbnRzLCBwcm9jZXNzZWQsIG9yaWdJbmRleCkge1xuICAgIHZhciBuZXdQb3MgPSBwb3MgKyAxO1xuICAgIHZhciBsZW5ndGggPSByZXN1bHRFdmVudHMubGVuZ3RoO1xuICAgIGlmIChuZXdQb3MgPiBsZW5ndGggLSAxKSB7IHJldHVybiBwb3MgLSAxOyB9XG4gICAgdmFyIHAgID0gcmVzdWx0RXZlbnRzW3Bvc10ucG9pbnQ7XG4gICAgdmFyIHAxID0gcmVzdWx0RXZlbnRzW25ld1Bvc10ucG9pbnQ7XG5cblxuICAgIC8vIHdoaWxlIGluIHJhbmdlIGFuZCBub3QgdGhlIGN1cnJlbnQgb25lIGJ5IHZhbHVlXG4gICAgd2hpbGUgKG5ld1BvcyA8IGxlbmd0aCAmJiBwMVswXSA9PT0gcFswXSAmJiBwMVsxXSA9PT0gcFsxXSkge1xuICAgICAgaWYgKCFwcm9jZXNzZWRbbmV3UG9zXSkge1xuICAgICAgICByZXR1cm4gbmV3UG9zO1xuICAgICAgfSBlbHNlICAge1xuICAgICAgICBuZXdQb3MrKztcbiAgICAgIH1cbiAgICAgIHAxID0gcmVzdWx0RXZlbnRzW25ld1Bvc10ucG9pbnQ7XG4gICAgfVxuXG4gICAgbmV3UG9zID0gcG9zIC0gMTtcblxuICAgIHdoaWxlIChwcm9jZXNzZWRbbmV3UG9zXSAmJiBuZXdQb3MgPj0gb3JpZ0luZGV4KSB7XG4gICAgICBuZXdQb3MtLTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BvcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBwYXJhbSAge0FycmF5LjxTd2VlcEV2ZW50Pn0gc29ydGVkRXZlbnRzXG4gICAqIEByZXR1cm4ge0FycmF5LjwqPn0gcG9seWdvbnNcbiAgICovXG4gIGZ1bmN0aW9uIGNvbm5lY3RFZGdlcyhzb3J0ZWRFdmVudHMsIG9wZXJhdGlvbikge1xuICAgIHZhciBpLCBsZW47XG4gICAgdmFyIHJlc3VsdEV2ZW50cyA9IG9yZGVyRXZlbnRzKHNvcnRlZEV2ZW50cyk7XG5cbiAgICAvLyBcImZhbHNlXCItZmlsbGVkIGFycmF5XG4gICAgdmFyIHByb2Nlc3NlZCA9IHt9O1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgZXZlbnQ7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSByZXN1bHRFdmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChwcm9jZXNzZWRbaV0pIHsgY29udGludWU7IH1cbiAgICAgIHZhciBjb250b3VyID0gW1tdXTtcblxuICAgICAgaWYgKCFyZXN1bHRFdmVudHNbaV0uaXNFeHRlcmlvclJpbmcpIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gRElGRkVSRU5DRSAmJiAhcmVzdWx0RXZlbnRzW2ldLmlzU3ViamVjdCAmJiByZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29udG91cik7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFtbY29udG91cl1dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnB1c2goY29udG91clswXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSBESUZGRVJFTkNFICYmICFyZXN1bHRFdmVudHNbaV0uaXNTdWJqZWN0ICYmIHJlc3VsdC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0ucHVzaChjb250b3VyWzBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNvbnRvdXIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmluZ0lkID0gcmVzdWx0Lmxlbmd0aCAtIDE7XG4gICAgICB2YXIgcG9zID0gaTtcblxuICAgICAgdmFyIGluaXRpYWwgPSByZXN1bHRFdmVudHNbaV0ucG9pbnQ7XG4gICAgICBjb250b3VyWzBdLnB1c2goaW5pdGlhbCk7XG5cbiAgICAgIHdoaWxlIChwb3MgPj0gaSkge1xuICAgICAgICBldmVudCA9IHJlc3VsdEV2ZW50c1twb3NdO1xuICAgICAgICBwcm9jZXNzZWRbcG9zXSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGV2ZW50LmxlZnQpIHtcbiAgICAgICAgICBldmVudC5yZXN1bHRJbk91dCA9IGZhbHNlO1xuICAgICAgICAgIGV2ZW50LmNvbnRvdXJJZCAgID0gcmluZ0lkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50Lm90aGVyRXZlbnQucmVzdWx0SW5PdXQgPSB0cnVlO1xuICAgICAgICAgIGV2ZW50Lm90aGVyRXZlbnQuY29udG91cklkICAgPSByaW5nSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBwb3MgPSBldmVudC5wb3M7XG4gICAgICAgIHByb2Nlc3NlZFtwb3NdID0gdHJ1ZTtcbiAgICAgICAgY29udG91clswXS5wdXNoKHJlc3VsdEV2ZW50c1twb3NdLnBvaW50KTtcbiAgICAgICAgcG9zID0gbmV4dFBvcyhwb3MsIHJlc3VsdEV2ZW50cywgcHJvY2Vzc2VkLCBpKTtcbiAgICAgIH1cblxuICAgICAgcG9zID0gcG9zID09PSAtMSA/IGkgOiBwb3M7XG5cbiAgICAgIGV2ZW50ID0gcmVzdWx0RXZlbnRzW3Bvc107XG4gICAgICBwcm9jZXNzZWRbcG9zXSA9IHByb2Nlc3NlZFtldmVudC5wb3NdID0gdHJ1ZTtcbiAgICAgIGV2ZW50Lm90aGVyRXZlbnQucmVzdWx0SW5PdXQgPSB0cnVlO1xuICAgICAgZXZlbnQub3RoZXJFdmVudC5jb250b3VySWQgICA9IHJpbmdJZDtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgaWYgdGhlIHJlc3VsdCBpcyBhIHBvbHlnb24gKGVnIG5vdCBtdWx0aXBvbHkpXG4gICAgLy8gQ29tbWVudGVkIGl0IGFnYWluLCBsZXQncyBzZWUgd2hhdCBkbyB3ZSBtZWFuIGJ5IHRoYXRcbiAgICAvLyBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSkgcmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgdGlueXF1ZXVlID0gVGlueVF1ZXVlO1xuICB2YXIgZGVmYXVsdF8xID0gVGlueVF1ZXVlO1xuXG4gIGZ1bmN0aW9uIFRpbnlRdWV1ZShkYXRhLCBjb21wYXJlKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFRpbnlRdWV1ZSkpIHsgcmV0dXJuIG5ldyBUaW55UXVldWUoZGF0YSwgY29tcGFyZSk7IH1cblxuICAgICAgdGhpcy5kYXRhID0gZGF0YSB8fCBbXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgIHRoaXMuY29tcGFyZSA9IGNvbXBhcmUgfHwgZGVmYXVsdENvbXBhcmU7XG5cbiAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gKHRoaXMubGVuZ3RoID4+IDEpIC0gMTsgaSA+PSAwOyBpLS0pIHsgdGhpcyQxLl9kb3duKGkpOyB9XG4gICAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWZhdWx0Q29tcGFyZShhLCBiKSB7XG4gICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG4gIH1cblxuICBUaW55UXVldWUucHJvdG90eXBlID0ge1xuXG4gICAgICBwdXNoOiBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGl0ZW0pO1xuICAgICAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgICAgICAgdGhpcy5fdXAodGhpcy5sZW5ndGggLSAxKTtcbiAgICAgIH0sXG5cbiAgICAgIHBvcDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgICAgICAgICB2YXIgdG9wID0gdGhpcy5kYXRhWzBdO1xuICAgICAgICAgIHRoaXMubGVuZ3RoLS07XG5cbiAgICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVswXSA9IHRoaXMuZGF0YVt0aGlzLmxlbmd0aF07XG4gICAgICAgICAgICAgIHRoaXMuX2Rvd24oMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0YS5wb3AoKTtcblxuICAgICAgICAgIHJldHVybiB0b3A7XG4gICAgICB9LFxuXG4gICAgICBwZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVswXTtcbiAgICAgIH0sXG5cbiAgICAgIF91cDogZnVuY3Rpb24gKHBvcykge1xuICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgIHZhciBjb21wYXJlID0gdGhpcy5jb21wYXJlO1xuICAgICAgICAgIHZhciBpdGVtID0gZGF0YVtwb3NdO1xuXG4gICAgICAgICAgd2hpbGUgKHBvcyA+IDApIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IChwb3MgLSAxKSA+PiAxO1xuICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IGRhdGFbcGFyZW50XTtcbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgY3VycmVudCkgPj0gMCkgeyBicmVhazsgfVxuICAgICAgICAgICAgICBkYXRhW3Bvc10gPSBjdXJyZW50O1xuICAgICAgICAgICAgICBwb3MgPSBwYXJlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtwb3NdID0gaXRlbTtcbiAgICAgIH0sXG5cbiAgICAgIF9kb3duOiBmdW5jdGlvbiAocG9zKSB7XG4gICAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICB2YXIgY29tcGFyZSA9IHRoaXMuY29tcGFyZTtcbiAgICAgICAgICB2YXIgaGFsZkxlbmd0aCA9IHRoaXMubGVuZ3RoID4+IDE7XG4gICAgICAgICAgdmFyIGl0ZW0gPSBkYXRhW3Bvc107XG5cbiAgICAgICAgICB3aGlsZSAocG9zIDwgaGFsZkxlbmd0aCkge1xuICAgICAgICAgICAgICB2YXIgbGVmdCA9IChwb3MgPDwgMSkgKyAxO1xuICAgICAgICAgICAgICB2YXIgcmlnaHQgPSBsZWZ0ICsgMTtcbiAgICAgICAgICAgICAgdmFyIGJlc3QgPSBkYXRhW2xlZnRdO1xuXG4gICAgICAgICAgICAgIGlmIChyaWdodCA8IHRoaXMkMS5sZW5ndGggJiYgY29tcGFyZShkYXRhW3JpZ2h0XSwgYmVzdCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgICBiZXN0ID0gZGF0YVtyaWdodF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmUoYmVzdCwgaXRlbSkgPj0gMCkgeyBicmVhazsgfVxuXG4gICAgICAgICAgICAgIGRhdGFbcG9zXSA9IGJlc3Q7XG4gICAgICAgICAgICAgIHBvcyA9IGxlZnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YVtwb3NdID0gaXRlbTtcbiAgICAgIH1cbiAgfTtcbiAgdGlueXF1ZXVlLmRlZmF1bHQgPSBkZWZhdWx0XzE7XG5cbiAgdmFyIG1heCA9IE1hdGgubWF4O1xuICB2YXIgbWluID0gTWF0aC5taW47XG5cbiAgdmFyIGNvbnRvdXJJZCA9IDA7XG5cblxuICBmdW5jdGlvbiBwcm9jZXNzUG9seWdvbihjb250b3VyT3JIb2xlLCBpc1N1YmplY3QsIGRlcHRoLCBRLCBiYm94LCBpc0V4dGVyaW9yUmluZykge1xuICAgIHZhciBpLCBsZW4sIHMxLCBzMiwgZTEsIGUyO1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IGNvbnRvdXJPckhvbGUubGVuZ3RoIC0gMTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBzMSA9IGNvbnRvdXJPckhvbGVbaV07XG4gICAgICBzMiA9IGNvbnRvdXJPckhvbGVbaSArIDFdO1xuICAgICAgZTEgPSBuZXcgU3dlZXBFdmVudChzMSwgZmFsc2UsIHVuZGVmaW5lZCwgaXNTdWJqZWN0KTtcbiAgICAgIGUyID0gbmV3IFN3ZWVwRXZlbnQoczIsIGZhbHNlLCBlMSwgICAgICAgIGlzU3ViamVjdCk7XG4gICAgICBlMS5vdGhlckV2ZW50ID0gZTI7XG5cbiAgICAgIGlmIChzMVswXSA9PT0gczJbMF0gJiYgczFbMV0gPT09IHMyWzFdKSB7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBza2lwIGNvbGxhcHNlZCBlZGdlcywgb3IgaXQgYnJlYWtzXG4gICAgICB9XG5cbiAgICAgIGUxLmNvbnRvdXJJZCA9IGUyLmNvbnRvdXJJZCA9IGRlcHRoO1xuICAgICAgaWYgKCFpc0V4dGVyaW9yUmluZykge1xuICAgICAgICBlMS5pc0V4dGVyaW9yUmluZyA9IGZhbHNlO1xuICAgICAgICBlMi5pc0V4dGVyaW9yUmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBhcmVFdmVudHMoZTEsIGUyKSA+IDApIHtcbiAgICAgICAgZTIubGVmdCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlMS5sZWZ0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHggPSBzMVswXSwgeSA9IHMxWzFdO1xuICAgICAgYmJveFswXSA9IG1pbihiYm94WzBdLCB4KTtcbiAgICAgIGJib3hbMV0gPSBtaW4oYmJveFsxXSwgeSk7XG4gICAgICBiYm94WzJdID0gbWF4KGJib3hbMl0sIHgpO1xuICAgICAgYmJveFszXSA9IG1heChiYm94WzNdLCB5KTtcblxuICAgICAgLy8gUHVzaGluZyBpdCBzbyB0aGUgcXVldWUgaXMgc29ydGVkIGZyb20gbGVmdCB0byByaWdodCxcbiAgICAgIC8vIHdpdGggb2JqZWN0IG9uIHRoZSBsZWZ0IGhhdmluZyB0aGUgaGlnaGVzdCBwcmlvcml0eS5cbiAgICAgIFEucHVzaChlMSk7XG4gICAgICBRLnB1c2goZTIpO1xuICAgIH1cbiAgfVxuXG5cbiAgZnVuY3Rpb24gZmlsbFF1ZXVlKHN1YmplY3QsIGNsaXBwaW5nLCBzYmJveCwgY2Jib3gsIG9wZXJhdGlvbikge1xuICAgIHZhciBldmVudFF1ZXVlID0gbmV3IHRpbnlxdWV1ZShudWxsLCBjb21wYXJlRXZlbnRzKTtcbiAgICB2YXIgcG9seWdvblNldCwgaXNFeHRlcmlvclJpbmcsIGksIGlpLCBqLCBqajsgLy8sIGssIGtrO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBzdWJqZWN0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHBvbHlnb25TZXQgPSBzdWJqZWN0W2ldO1xuICAgICAgZm9yIChqID0gMCwgamogPSBwb2x5Z29uU2V0Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgaXNFeHRlcmlvclJpbmcgPSBqID09PSAwO1xuICAgICAgICBpZiAoaXNFeHRlcmlvclJpbmcpIHsgY29udG91cklkKys7IH1cbiAgICAgICAgcHJvY2Vzc1BvbHlnb24ocG9seWdvblNldFtqXSwgdHJ1ZSwgY29udG91cklkLCBldmVudFF1ZXVlLCBzYmJveCwgaXNFeHRlcmlvclJpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIGlpID0gY2xpcHBpbmcubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgcG9seWdvblNldCA9IGNsaXBwaW5nW2ldO1xuICAgICAgZm9yIChqID0gMCwgamogPSBwb2x5Z29uU2V0Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgaXNFeHRlcmlvclJpbmcgPSBqID09PSAwO1xuICAgICAgICBpZiAob3BlcmF0aW9uID09PSBESUZGRVJFTkNFKSB7IGlzRXh0ZXJpb3JSaW5nID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGlzRXh0ZXJpb3JSaW5nKSB7IGNvbnRvdXJJZCsrOyB9XG4gICAgICAgIHByb2Nlc3NQb2x5Z29uKHBvbHlnb25TZXRbal0sIGZhbHNlLCBjb250b3VySWQsIGV2ZW50UXVldWUsIGNiYm94LCBpc0V4dGVyaW9yUmluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50UXVldWU7XG4gIH1cblxuICB2YXIgRU1QVFkgPSBbXTtcblxuXG4gIGZ1bmN0aW9uIHRyaXZpYWxPcGVyYXRpb24oc3ViamVjdCwgY2xpcHBpbmcsIG9wZXJhdGlvbikge1xuICAgIHZhciByZXN1bHQgPSBudWxsO1xuICAgIGlmIChzdWJqZWN0Lmxlbmd0aCAqIGNsaXBwaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgICAgICAgIChvcGVyYXRpb24gPT09IElOVEVSU0VDVElPTikge1xuICAgICAgICByZXN1bHQgPSBFTVBUWTtcbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSBESUZGRVJFTkNFKSB7XG4gICAgICAgIHJlc3VsdCA9IHN1YmplY3Q7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gVU5JT04gfHxcbiAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID09PSBYT1IpIHtcbiAgICAgICAgcmVzdWx0ID0gKHN1YmplY3QubGVuZ3RoID09PSAwKSA/IGNsaXBwaW5nIDogc3ViamVjdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gY29tcGFyZUJCb3hlcyhzdWJqZWN0LCBjbGlwcGluZywgc2Jib3gsIGNiYm94LCBvcGVyYXRpb24pIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoc2Jib3hbMF0gPiBjYmJveFsyXSB8fFxuICAgICAgICBjYmJveFswXSA+IHNiYm94WzJdIHx8XG4gICAgICAgIHNiYm94WzFdID4gY2Jib3hbM10gfHxcbiAgICAgICAgY2Jib3hbMV0gPiBzYmJveFszXSkge1xuICAgICAgaWYgICAgICAgIChvcGVyYXRpb24gPT09IElOVEVSU0VDVElPTikge1xuICAgICAgICByZXN1bHQgPSBFTVBUWTtcbiAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSBESUZGRVJFTkNFKSB7XG4gICAgICAgIHJlc3VsdCA9IHN1YmplY3Q7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gVU5JT04gfHxcbiAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID09PSBYT1IpIHtcbiAgICAgICAgcmVzdWx0ID0gc3ViamVjdC5jb25jYXQoY2xpcHBpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cblxuICBmdW5jdGlvbiBib29sZWFuKHN1YmplY3QsIGNsaXBwaW5nLCBvcGVyYXRpb24pIHtcbiAgICBpZiAodHlwZW9mIHN1YmplY3RbMF1bMF1bMF0gPT09ICdudW1iZXInKSB7XG4gICAgICBzdWJqZWN0ID0gW3N1YmplY3RdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNsaXBwaW5nWzBdWzBdWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgY2xpcHBpbmcgPSBbY2xpcHBpbmddO1xuICAgIH1cbiAgICB2YXIgdHJpdmlhbCA9IHRyaXZpYWxPcGVyYXRpb24oc3ViamVjdCwgY2xpcHBpbmcsIG9wZXJhdGlvbik7XG4gICAgaWYgKHRyaXZpYWwpIHtcbiAgICAgIHJldHVybiB0cml2aWFsID09PSBFTVBUWSA/IG51bGwgOiB0cml2aWFsO1xuICAgIH1cbiAgICB2YXIgc2Jib3ggPSBbSW5maW5pdHksIEluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eV07XG4gICAgdmFyIGNiYm94ID0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldO1xuXG4gICAgLy9jb25zb2xlLnRpbWUoJ2ZpbGwgcXVldWUnKTtcbiAgICB2YXIgZXZlbnRRdWV1ZSA9IGZpbGxRdWV1ZShzdWJqZWN0LCBjbGlwcGluZywgc2Jib3gsIGNiYm94LCBvcGVyYXRpb24pO1xuICAgIC8vY29uc29sZS50aW1lRW5kKCdmaWxsIHF1ZXVlJyk7XG5cbiAgICB0cml2aWFsID0gY29tcGFyZUJCb3hlcyhzdWJqZWN0LCBjbGlwcGluZywgc2Jib3gsIGNiYm94LCBvcGVyYXRpb24pO1xuICAgIGlmICh0cml2aWFsKSB7XG4gICAgICByZXR1cm4gdHJpdmlhbCA9PT0gRU1QVFkgPyBudWxsIDogdHJpdmlhbDtcbiAgICB9XG4gICAgLy9jb25zb2xlLnRpbWUoJ3N1YmRpdmlkZSBlZGdlcycpO1xuICAgIHZhciBzb3J0ZWRFdmVudHMgPSBzdWJkaXZpZGUoZXZlbnRRdWV1ZSwgc3ViamVjdCwgY2xpcHBpbmcsIHNiYm94LCBjYmJveCwgb3BlcmF0aW9uKTtcbiAgICAvL2NvbnNvbGUudGltZUVuZCgnc3ViZGl2aWRlIGVkZ2VzJyk7XG5cbiAgICAvL2NvbnNvbGUudGltZSgnY29ubmVjdCB2ZXJ0aWNlcycpO1xuICAgIHZhciByZXN1bHQgPSBjb25uZWN0RWRnZXMoc29ydGVkRXZlbnRzLCBvcGVyYXRpb24pO1xuICAgIC8vY29uc29sZS50aW1lRW5kKCdjb25uZWN0IHZlcnRpY2VzJyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuaW9uIChzdWJqZWN0LCBjbGlwcGluZykge1xuICAgIHJldHVybiBib29sZWFuKHN1YmplY3QsIGNsaXBwaW5nLCBVTklPTik7XG4gIH1cblxuICBmdW5jdGlvbiBkaWZmIChzdWJqZWN0LCBjbGlwcGluZykge1xuICAgIHJldHVybiBib29sZWFuKHN1YmplY3QsIGNsaXBwaW5nLCBESUZGRVJFTkNFKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHhvciAoc3ViamVjdCwgY2xpcHBpbmcpe1xuICAgIHJldHVybiBib29sZWFuKHN1YmplY3QsIGNsaXBwaW5nLCBYT1IpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJzZWN0aW9uJDEgKHN1YmplY3QsIGNsaXBwaW5nKSB7XG4gICAgcmV0dXJuIGJvb2xlYW4oc3ViamVjdCwgY2xpcHBpbmcsIElOVEVSU0VDVElPTik7XG4gIH1cblxuICAvKipcbiAgICogQGVudW0ge051bWJlcn1cbiAgICovXG4gIHZhciBvcGVyYXRpb25zID0geyBVTklPTjogVU5JT04sIERJRkZFUkVOQ0U6IERJRkZFUkVOQ0UsIElOVEVSU0VDVElPTjogSU5URVJTRUNUSU9OLCBYT1I6IFhPUiB9O1xuXG4gIGV4cG9ydHMudW5pb24gPSB1bmlvbjtcbiAgZXhwb3J0cy5kaWZmID0gZGlmZjtcbiAgZXhwb3J0cy54b3IgPSB4b3I7XG4gIGV4cG9ydHMuaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uJDE7XG4gIGV4cG9ydHMub3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hcnRpbmV6LnVtZC5qcy5tYXBcbiIsIi8vIHJhbmRvbUNvbG9yIGJ5IERhdmlkIE1lcmZpZWxkIHVuZGVyIHRoZSBDQzAgbGljZW5zZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhdmlkbWVyZmllbGQvcmFuZG9tQ29sb3IvXG5cbjsoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuXG4gIC8vIFN1cHBvcnQgQ29tbW9uSlNcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByYW5kb21Db2xvciA9IGZhY3RvcnkoKTtcblxuICAgIC8vIFN1cHBvcnQgTm9kZUpTICYgQ29tcG9uZW50LCB3aGljaCBhbGxvdyBtb2R1bGUuZXhwb3J0cyB0byBiZSBhIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZSAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmFuZG9tQ29sb3I7XG4gICAgfVxuXG4gICAgLy8gU3VwcG9ydCBDb21tb25KUyAxLjEuMSBzcGVjXG4gICAgZXhwb3J0cy5yYW5kb21Db2xvciA9IHJhbmRvbUNvbG9yO1xuXG4gIC8vIFN1cHBvcnQgQU1EXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKFtdLCBmYWN0b3J5KTtcblxuICAvLyBTdXBwb3J0IHZhbmlsbGEgc2NyaXB0IGxvYWRpbmdcbiAgfSBlbHNlIHtcbiAgICByb290LnJhbmRvbUNvbG9yID0gZmFjdG9yeSgpO1xuICB9XG5cbn0odGhpcywgZnVuY3Rpb24oKSB7XG5cbiAgLy8gU2VlZCB0byBnZXQgcmVwZWF0YWJsZSBjb2xvcnNcbiAgdmFyIHNlZWQgPSBudWxsO1xuXG4gIC8vIFNoYXJlZCBjb2xvciBkaWN0aW9uYXJ5XG4gIHZhciBjb2xvckRpY3Rpb25hcnkgPSB7fTtcblxuICAvLyBQb3B1bGF0ZSB0aGUgY29sb3IgZGljdGlvbmFyeVxuICBsb2FkQ29sb3JCb3VuZHMoKTtcblxuICAvLyBjaGVjayBpZiBhIHJhbmdlIGlzIHRha2VuXG4gIHZhciBjb2xvclJhbmdlcyA9IFtdO1xuXG4gIHZhciByYW5kb21Db2xvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgc2VlZCBhbmQgZW5zdXJlIGl0J3MgYW5cbiAgICAvLyBpbnRlZ2VyLiBPdGhlcndpc2UsIHJlc2V0IHRoZSBzZWVkIHZhbHVlLlxuICAgIGlmIChvcHRpb25zLnNlZWQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNlZWQgIT09IG51bGwgJiYgb3B0aW9ucy5zZWVkID09PSBwYXJzZUludChvcHRpb25zLnNlZWQsIDEwKSkge1xuICAgICAgc2VlZCA9IG9wdGlvbnMuc2VlZDtcblxuICAgIC8vIEEgc3RyaW5nIHdhcyBwYXNzZWQgYXMgYSBzZWVkXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5zZWVkID09PSAnc3RyaW5nJykge1xuICAgICAgc2VlZCA9IHN0cmluZ1RvSW50ZWdlcihvcHRpb25zLnNlZWQpO1xuXG4gICAgLy8gU29tZXRoaW5nIHdhcyBwYXNzZWQgYXMgYSBzZWVkIGJ1dCBpdCB3YXNuJ3QgYW4gaW50ZWdlciBvciBzdHJpbmdcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuc2VlZCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuc2VlZCAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHNlZWQgdmFsdWUgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIHN0cmluZycpO1xuXG4gICAgLy8gTm8gc2VlZCwgcmVzZXQgdGhlIHZhbHVlIG91dHNpZGUuXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZWQgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBILFMsQjtcblxuICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgY29sb3JzXG4gICAgaWYgKG9wdGlvbnMuY291bnQgIT09IG51bGwgJiYgb3B0aW9ucy5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIHZhciB0b3RhbENvbG9ycyA9IG9wdGlvbnMuY291bnQsXG4gICAgICAgICAgY29sb3JzID0gW107XG4gICAgICAvLyBWYWx1ZSBmYWxzZSBhdCBpbmRleCBpIG1lYW5zIHRoZSByYW5nZSBpIGlzIG5vdCB0YWtlbiB5ZXQuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMuY291bnQ7IGkrKykge1xuICAgICAgICBjb2xvclJhbmdlcy5wdXNoKGZhbHNlKVxuICAgICAgICB9XG4gICAgICBvcHRpb25zLmNvdW50ID0gbnVsbDtcblxuICAgICAgd2hpbGUgKHRvdGFsQ29sb3JzID4gY29sb3JzLmxlbmd0aCkge1xuXG4gICAgICAgIHZhciBjb2xvciA9IHJhbmRvbUNvbG9yKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChzZWVkICE9PSBudWxsKSB7XG4gICAgICAgICAgb3B0aW9ucy5zZWVkID0gc2VlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbG9ycy5wdXNoKGNvbG9yKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5jb3VudCA9IHRvdGFsQ29sb3JzO1xuXG4gICAgICByZXR1cm4gY29sb3JzO1xuICAgIH1cblxuICAgIC8vIEZpcnN0IHdlIHBpY2sgYSBodWUgKEgpXG4gICAgSCA9IHBpY2tIdWUob3B0aW9ucyk7XG5cbiAgICAvLyBUaGVuIHVzZSBIIHRvIGRldGVybWluZSBzYXR1cmF0aW9uIChTKVxuICAgIFMgPSBwaWNrU2F0dXJhdGlvbihILCBvcHRpb25zKTtcblxuICAgIC8vIFRoZW4gdXNlIFMgYW5kIEggdG8gZGV0ZXJtaW5lIGJyaWdodG5lc3MgKEIpLlxuICAgIEIgPSBwaWNrQnJpZ2h0bmVzcyhILCBTLCBvcHRpb25zKTtcblxuICAgIC8vIFRoZW4gd2UgcmV0dXJuIHRoZSBIU0IgY29sb3IgaW4gdGhlIGRlc2lyZWQgZm9ybWF0XG4gICAgcmV0dXJuIHNldEZvcm1hdChbSCxTLEJdLCBvcHRpb25zKTtcbiAgfTtcblxuICBmdW5jdGlvbiBwaWNrSHVlKG9wdGlvbnMpIHtcbiAgICBpZiAoY29sb3JSYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGh1ZVJhbmdlID0gZ2V0UmVhbEh1ZVJhbmdlKG9wdGlvbnMuaHVlKVxuXG4gICAgICB2YXIgaHVlID0gcmFuZG9tV2l0aGluKGh1ZVJhbmdlKVxuXG4gICAgICAvL0VhY2ggb2YgY29sb3JSYW5nZXMubGVuZ3RoIHJhbmdlcyBoYXMgYSBsZW5ndGggZXF1YWwgYXBwcm94aW1hdGVsbHkgb25lIHN0ZXBcbiAgICAgIHZhciBzdGVwID0gKGh1ZVJhbmdlWzFdIC0gaHVlUmFuZ2VbMF0pIC8gY29sb3JSYW5nZXMubGVuZ3RoXG5cbiAgICAgIHZhciBqID0gcGFyc2VJbnQoKGh1ZSAtIGh1ZVJhbmdlWzBdKSAvIHN0ZXApXG5cbiAgICAgIC8vQ2hlY2sgaWYgdGhlIHJhbmdlIGogaXMgdGFrZW5cbiAgICAgIGlmIChjb2xvclJhbmdlc1tqXSA9PT0gdHJ1ZSkge1xuICAgICAgICBqID0gKGogKyAyKSAlIGNvbG9yUmFuZ2VzLmxlbmd0aFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbG9yUmFuZ2VzW2pdID0gdHJ1ZVxuICAgICAgICAgICB9XG5cbiAgICAgIHZhciBtaW4gPSAoaHVlUmFuZ2VbMF0gKyBqICogc3RlcCkgJSAzNTksXG4gICAgICAgICAgbWF4ID0gKGh1ZVJhbmdlWzBdICsgKGogKyAxKSAqIHN0ZXApICUgMzU5O1xuXG4gICAgICBodWVSYW5nZSA9IFttaW4sIG1heF1cblxuICAgICAgaHVlID0gcmFuZG9tV2l0aGluKGh1ZVJhbmdlKVxuXG4gICAgICBpZiAoaHVlIDwgMCkge2h1ZSA9IDM2MCArIGh1ZTt9XG4gICAgICByZXR1cm4gaHVlXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIGh1ZVJhbmdlID0gZ2V0SHVlUmFuZ2Uob3B0aW9ucy5odWUpXG5cbiAgICAgIGh1ZSA9IHJhbmRvbVdpdGhpbihodWVSYW5nZSk7XG4gICAgICAvLyBJbnN0ZWFkIG9mIHN0b3JpbmcgcmVkIGFzIHR3byBzZXBlcmF0ZSByYW5nZXMsXG4gICAgICAvLyB3ZSBncm91cCB0aGVtLCB1c2luZyBuZWdhdGl2ZSBudW1iZXJzXG4gICAgICBpZiAoaHVlIDwgMCkge1xuICAgICAgICBodWUgPSAzNjAgKyBodWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBodWU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGlja1NhdHVyYXRpb24gKGh1ZSwgb3B0aW9ucykge1xuXG4gICAgaWYgKG9wdGlvbnMuaHVlID09PSAnbW9ub2Nocm9tZScpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmx1bWlub3NpdHkgPT09ICdyYW5kb20nKSB7XG4gICAgICByZXR1cm4gcmFuZG9tV2l0aGluKFswLDEwMF0pO1xuICAgIH1cblxuICAgIHZhciBzYXR1cmF0aW9uUmFuZ2UgPSBnZXRTYXR1cmF0aW9uUmFuZ2UoaHVlKTtcblxuICAgIHZhciBzTWluID0gc2F0dXJhdGlvblJhbmdlWzBdLFxuICAgICAgICBzTWF4ID0gc2F0dXJhdGlvblJhbmdlWzFdO1xuXG4gICAgc3dpdGNoIChvcHRpb25zLmx1bWlub3NpdHkpIHtcblxuICAgICAgY2FzZSAnYnJpZ2h0JzpcbiAgICAgICAgc01pbiA9IDU1O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZGFyayc6XG4gICAgICAgIHNNaW4gPSBzTWF4IC0gMTA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsaWdodCc6XG4gICAgICAgIHNNYXggPSA1NTtcbiAgICAgICAgYnJlYWs7XG4gICB9XG5cbiAgICByZXR1cm4gcmFuZG9tV2l0aGluKFtzTWluLCBzTWF4XSk7XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIHBpY2tCcmlnaHRuZXNzIChILCBTLCBvcHRpb25zKSB7XG5cbiAgICB2YXIgYk1pbiA9IGdldE1pbmltdW1CcmlnaHRuZXNzKEgsIFMpLFxuICAgICAgICBiTWF4ID0gMTAwO1xuXG4gICAgc3dpdGNoIChvcHRpb25zLmx1bWlub3NpdHkpIHtcblxuICAgICAgY2FzZSAnZGFyayc6XG4gICAgICAgIGJNYXggPSBiTWluICsgMjA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsaWdodCc6XG4gICAgICAgIGJNaW4gPSAoYk1heCArIGJNaW4pLzI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyYW5kb20nOlxuICAgICAgICBiTWluID0gMDtcbiAgICAgICAgYk1heCA9IDEwMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmRvbVdpdGhpbihbYk1pbiwgYk1heF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0Rm9ybWF0IChoc3YsIG9wdGlvbnMpIHtcblxuICAgIHN3aXRjaCAob3B0aW9ucy5mb3JtYXQpIHtcblxuICAgICAgY2FzZSAnaHN2QXJyYXknOlxuICAgICAgICByZXR1cm4gaHN2O1xuXG4gICAgICBjYXNlICdoc2xBcnJheSc6XG4gICAgICAgIHJldHVybiBIU1Z0b0hTTChoc3YpO1xuXG4gICAgICBjYXNlICdoc2wnOlxuICAgICAgICB2YXIgaHNsID0gSFNWdG9IU0woaHN2KTtcbiAgICAgICAgcmV0dXJuICdoc2woJytoc2xbMF0rJywgJytoc2xbMV0rJyUsICcraHNsWzJdKyclKSc7XG5cbiAgICAgIGNhc2UgJ2hzbGEnOlxuICAgICAgICB2YXIgaHNsQ29sb3IgPSBIU1Z0b0hTTChoc3YpO1xuICAgICAgICB2YXIgYWxwaGEgPSBvcHRpb25zLmFscGhhIHx8IE1hdGgucmFuZG9tKCk7XG4gICAgICAgIHJldHVybiAnaHNsYSgnK2hzbENvbG9yWzBdKycsICcraHNsQ29sb3JbMV0rJyUsICcraHNsQ29sb3JbMl0rJyUsICcgKyBhbHBoYSArICcpJztcblxuICAgICAgY2FzZSAncmdiQXJyYXknOlxuICAgICAgICByZXR1cm4gSFNWdG9SR0IoaHN2KTtcblxuICAgICAgY2FzZSAncmdiJzpcbiAgICAgICAgdmFyIHJnYiA9IEhTVnRvUkdCKGhzdik7XG4gICAgICAgIHJldHVybiAncmdiKCcgKyByZ2Iuam9pbignLCAnKSArICcpJztcblxuICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgIHZhciByZ2JDb2xvciA9IEhTVnRvUkdCKGhzdik7XG4gICAgICAgIHZhciBhbHBoYSA9IG9wdGlvbnMuYWxwaGEgfHwgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgcmV0dXJuICdyZ2JhKCcgKyByZ2JDb2xvci5qb2luKCcsICcpICsgJywgJyArIGFscGhhICsgJyknO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gSFNWdG9IZXgoaHN2KTtcbiAgICB9XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE1pbmltdW1CcmlnaHRuZXNzKEgsIFMpIHtcblxuICAgIHZhciBsb3dlckJvdW5kcyA9IGdldENvbG9ySW5mbyhIKS5sb3dlckJvdW5kcztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG93ZXJCb3VuZHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cbiAgICAgIHZhciBzMSA9IGxvd2VyQm91bmRzW2ldWzBdLFxuICAgICAgICAgIHYxID0gbG93ZXJCb3VuZHNbaV1bMV07XG5cbiAgICAgIHZhciBzMiA9IGxvd2VyQm91bmRzW2krMV1bMF0sXG4gICAgICAgICAgdjIgPSBsb3dlckJvdW5kc1tpKzFdWzFdO1xuXG4gICAgICBpZiAoUyA+PSBzMSAmJiBTIDw9IHMyKSB7XG5cbiAgICAgICAgIHZhciBtID0gKHYyIC0gdjEpLyhzMiAtIHMxKSxcbiAgICAgICAgICAgICBiID0gdjEgLSBtKnMxO1xuXG4gICAgICAgICByZXR1cm4gbSpTICsgYjtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SHVlUmFuZ2UgKGNvbG9ySW5wdXQpIHtcblxuICAgIGlmICh0eXBlb2YgcGFyc2VJbnQoY29sb3JJbnB1dCkgPT09ICdudW1iZXInKSB7XG5cbiAgICAgIHZhciBudW1iZXIgPSBwYXJzZUludChjb2xvcklucHV0KTtcblxuICAgICAgaWYgKG51bWJlciA8IDM2MCAmJiBudW1iZXIgPiAwKSB7XG4gICAgICAgIHJldHVybiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2xvcklucHV0ID09PSAnc3RyaW5nJykge1xuXG4gICAgICBpZiAoY29sb3JEaWN0aW9uYXJ5W2NvbG9ySW5wdXRdKSB7XG4gICAgICAgIHZhciBjb2xvciA9IGNvbG9yRGljdGlvbmFyeVtjb2xvcklucHV0XTtcbiAgICAgICAgaWYgKGNvbG9yLmh1ZVJhbmdlKSB7cmV0dXJuIGNvbG9yLmh1ZVJhbmdlO31cbiAgICAgIH0gZWxzZSBpZiAoY29sb3JJbnB1dC5tYXRjaCgvXiM/KFswLTlBLUZdezN9fFswLTlBLUZdezZ9KSQvaSkpIHtcbiAgICAgICAgdmFyIGh1ZSA9IEhleFRvSFNCKGNvbG9ySW5wdXQpWzBdO1xuICAgICAgICByZXR1cm4gWyBodWUsIGh1ZSBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbMCwzNjBdO1xuXG4gIH1cblxuICBmdW5jdGlvbiBnZXRTYXR1cmF0aW9uUmFuZ2UgKGh1ZSkge1xuICAgIHJldHVybiBnZXRDb2xvckluZm8oaHVlKS5zYXR1cmF0aW9uUmFuZ2U7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb2xvckluZm8gKGh1ZSkge1xuXG4gICAgLy8gTWFwcyByZWQgY29sb3JzIHRvIG1ha2UgcGlja2luZyBodWUgZWFzaWVyXG4gICAgaWYgKGh1ZSA+PSAzMzQgJiYgaHVlIDw9IDM2MCkge1xuICAgICAgaHVlLT0gMzYwO1xuICAgIH1cblxuICAgIGZvciAodmFyIGNvbG9yTmFtZSBpbiBjb2xvckRpY3Rpb25hcnkpIHtcbiAgICAgICB2YXIgY29sb3IgPSBjb2xvckRpY3Rpb25hcnlbY29sb3JOYW1lXTtcbiAgICAgICBpZiAoY29sb3IuaHVlUmFuZ2UgJiZcbiAgICAgICAgICAgaHVlID49IGNvbG9yLmh1ZVJhbmdlWzBdICYmXG4gICAgICAgICAgIGh1ZSA8PSBjb2xvci5odWVSYW5nZVsxXSkge1xuICAgICAgICAgIHJldHVybiBjb2xvckRpY3Rpb25hcnlbY29sb3JOYW1lXTtcbiAgICAgICB9XG4gICAgfSByZXR1cm4gJ0NvbG9yIG5vdCBmb3VuZCc7XG4gIH1cblxuICBmdW5jdGlvbiByYW5kb21XaXRoaW4gKHJhbmdlKSB7XG4gICAgaWYgKHNlZWQgPT09IG51bGwpIHtcbiAgICAgIC8vZ2VuZXJhdGUgcmFuZG9tIGV2ZW5seSBkZXN0aW5jdCBudW1iZXIgZnJvbSA6IGh0dHBzOi8vbWFydGluLmFua2VybC5jb20vMjAwOS8xMi8wOS9ob3ctdG8tY3JlYXRlLXJhbmRvbS1jb2xvcnMtcHJvZ3JhbW1hdGljYWxseS9cbiAgICAgIHZhciBnb2xkZW5fcmF0aW8gPSAwLjYxODAzMzk4ODc0OTg5NVxuICAgICAgdmFyIHI9TWF0aC5yYW5kb20oKVxuICAgICAgciArPSBnb2xkZW5fcmF0aW9cbiAgICAgIHIgJT0gMVxuICAgICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZ2VbMF0gKyByKihyYW5nZVsxXSArIDEgLSByYW5nZVswXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL1NlZWRlZCByYW5kb20gYWxnb3JpdGhtIGZyb20gaHR0cDovL2luZGllZ2Ftci5jb20vZ2VuZXJhdGUtcmVwZWF0YWJsZS1yYW5kb20tbnVtYmVycy1pbi1qcy9cbiAgICAgIHZhciBtYXggPSByYW5nZVsxXSB8fCAxO1xuICAgICAgdmFyIG1pbiA9IHJhbmdlWzBdIHx8IDA7XG4gICAgICBzZWVkID0gKHNlZWQgKiA5MzAxICsgNDkyOTcpICUgMjMzMjgwO1xuICAgICAgdmFyIHJuZCA9IHNlZWQgLyAyMzMyODAuMDtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKG1pbiArIHJuZCAqIChtYXggLSBtaW4pKTtcbn1cbiAgfVxuXG4gIGZ1bmN0aW9uIEhTVnRvSGV4IChoc3Ype1xuXG4gICAgdmFyIHJnYiA9IEhTVnRvUkdCKGhzdik7XG5cbiAgICBmdW5jdGlvbiBjb21wb25lbnRUb0hleChjKSB7XG4gICAgICAgIHZhciBoZXggPSBjLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgcmV0dXJuIGhleC5sZW5ndGggPT0gMSA/ICcwJyArIGhleCA6IGhleDtcbiAgICB9XG5cbiAgICB2YXIgaGV4ID0gJyMnICsgY29tcG9uZW50VG9IZXgocmdiWzBdKSArIGNvbXBvbmVudFRvSGV4KHJnYlsxXSkgKyBjb21wb25lbnRUb0hleChyZ2JbMl0pO1xuXG4gICAgcmV0dXJuIGhleDtcblxuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lQ29sb3IgKG5hbWUsIGh1ZVJhbmdlLCBsb3dlckJvdW5kcykge1xuXG4gICAgdmFyIHNNaW4gPSBsb3dlckJvdW5kc1swXVswXSxcbiAgICAgICAgc01heCA9IGxvd2VyQm91bmRzW2xvd2VyQm91bmRzLmxlbmd0aCAtIDFdWzBdLFxuXG4gICAgICAgIGJNaW4gPSBsb3dlckJvdW5kc1tsb3dlckJvdW5kcy5sZW5ndGggLSAxXVsxXSxcbiAgICAgICAgYk1heCA9IGxvd2VyQm91bmRzWzBdWzFdO1xuXG4gICAgY29sb3JEaWN0aW9uYXJ5W25hbWVdID0ge1xuICAgICAgaHVlUmFuZ2U6IGh1ZVJhbmdlLFxuICAgICAgbG93ZXJCb3VuZHM6IGxvd2VyQm91bmRzLFxuICAgICAgc2F0dXJhdGlvblJhbmdlOiBbc01pbiwgc01heF0sXG4gICAgICBicmlnaHRuZXNzUmFuZ2U6IFtiTWluLCBiTWF4XVxuICAgIH07XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWRDb2xvckJvdW5kcyAoKSB7XG5cbiAgICBkZWZpbmVDb2xvcihcbiAgICAgICdtb25vY2hyb21lJyxcbiAgICAgIG51bGwsXG4gICAgICBbWzAsMF0sWzEwMCwwXV1cbiAgICApO1xuXG4gICAgZGVmaW5lQ29sb3IoXG4gICAgICAncmVkJyxcbiAgICAgIFstMjYsMThdLFxuICAgICAgW1syMCwxMDBdLFszMCw5Ml0sWzQwLDg5XSxbNTAsODVdLFs2MCw3OF0sWzcwLDcwXSxbODAsNjBdLFs5MCw1NV0sWzEwMCw1MF1dXG4gICAgKTtcblxuICAgIGRlZmluZUNvbG9yKFxuICAgICAgJ29yYW5nZScsXG4gICAgICBbMTgsNDZdLFxuICAgICAgW1syMCwxMDBdLFszMCw5M10sWzQwLDg4XSxbNTAsODZdLFs2MCw4NV0sWzcwLDcwXSxbMTAwLDcwXV1cbiAgICApO1xuXG4gICAgZGVmaW5lQ29sb3IoXG4gICAgICAneWVsbG93JyxcbiAgICAgIFs0Niw2Ml0sXG4gICAgICBbWzI1LDEwMF0sWzQwLDk0XSxbNTAsODldLFs2MCw4Nl0sWzcwLDg0XSxbODAsODJdLFs5MCw4MF0sWzEwMCw3NV1dXG4gICAgKTtcblxuICAgIGRlZmluZUNvbG9yKFxuICAgICAgJ2dyZWVuJyxcbiAgICAgIFs2MiwxNzhdLFxuICAgICAgW1szMCwxMDBdLFs0MCw5MF0sWzUwLDg1XSxbNjAsODFdLFs3MCw3NF0sWzgwLDY0XSxbOTAsNTBdLFsxMDAsNDBdXVxuICAgICk7XG5cbiAgICBkZWZpbmVDb2xvcihcbiAgICAgICdibHVlJyxcbiAgICAgIFsxNzgsIDI1N10sXG4gICAgICBbWzIwLDEwMF0sWzMwLDg2XSxbNDAsODBdLFs1MCw3NF0sWzYwLDYwXSxbNzAsNTJdLFs4MCw0NF0sWzkwLDM5XSxbMTAwLDM1XV1cbiAgICApO1xuXG4gICAgZGVmaW5lQ29sb3IoXG4gICAgICAncHVycGxlJyxcbiAgICAgIFsyNTcsIDI4Ml0sXG4gICAgICBbWzIwLDEwMF0sWzMwLDg3XSxbNDAsNzldLFs1MCw3MF0sWzYwLDY1XSxbNzAsNTldLFs4MCw1Ml0sWzkwLDQ1XSxbMTAwLDQyXV1cbiAgICApO1xuXG4gICAgZGVmaW5lQ29sb3IoXG4gICAgICAncGluaycsXG4gICAgICBbMjgyLCAzMzRdLFxuICAgICAgW1syMCwxMDBdLFszMCw5MF0sWzQwLDg2XSxbNjAsODRdLFs4MCw4MF0sWzkwLDc1XSxbMTAwLDczXV1cbiAgICApO1xuXG4gIH1cblxuICBmdW5jdGlvbiBIU1Z0b1JHQiAoaHN2KSB7XG5cbiAgICAvLyB0aGlzIGRvZXNuJ3Qgd29yayBmb3IgdGhlIHZhbHVlcyBvZiAwIGFuZCAzNjBcbiAgICAvLyBoZXJlJ3MgdGhlIGhhY2t5IGZpeFxuICAgIHZhciBoID0gaHN2WzBdO1xuICAgIGlmIChoID09PSAwKSB7aCA9IDE7fVxuICAgIGlmIChoID09PSAzNjApIHtoID0gMzU5O31cblxuICAgIC8vIFJlYmFzZSB0aGUgaCxzLHYgdmFsdWVzXG4gICAgaCA9IGgvMzYwO1xuICAgIHZhciBzID0gaHN2WzFdLzEwMCxcbiAgICAgICAgdiA9IGhzdlsyXS8xMDA7XG5cbiAgICB2YXIgaF9pID0gTWF0aC5mbG9vcihoKjYpLFxuICAgICAgZiA9IGggKiA2IC0gaF9pLFxuICAgICAgcCA9IHYgKiAoMSAtIHMpLFxuICAgICAgcSA9IHYgKiAoMSAtIGYqcyksXG4gICAgICB0ID0gdiAqICgxIC0gKDEgLSBmKSpzKSxcbiAgICAgIHIgPSAyNTYsXG4gICAgICBnID0gMjU2LFxuICAgICAgYiA9IDI1NjtcblxuICAgIHN3aXRjaChoX2kpIHtcbiAgICAgIGNhc2UgMDogciA9IHY7IGcgPSB0OyBiID0gcDsgIGJyZWFrO1xuICAgICAgY2FzZSAxOiByID0gcTsgZyA9IHY7IGIgPSBwOyAgYnJlYWs7XG4gICAgICBjYXNlIDI6IHIgPSBwOyBnID0gdjsgYiA9IHQ7ICBicmVhaztcbiAgICAgIGNhc2UgMzogciA9IHA7IGcgPSBxOyBiID0gdjsgIGJyZWFrO1xuICAgICAgY2FzZSA0OiByID0gdDsgZyA9IHA7IGIgPSB2OyAgYnJlYWs7XG4gICAgICBjYXNlIDU6IHIgPSB2OyBnID0gcDsgYiA9IHE7ICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gW01hdGguZmxvb3IocioyNTUpLCBNYXRoLmZsb29yKGcqMjU1KSwgTWF0aC5mbG9vcihiKjI1NSldO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBIZXhUb0hTQiAoaGV4KSB7XG4gICAgaGV4ID0gaGV4LnJlcGxhY2UoL14jLywgJycpO1xuICAgIGhleCA9IGhleC5sZW5ndGggPT09IDMgPyBoZXgucmVwbGFjZSgvKC4pL2csICckMSQxJykgOiBoZXg7XG5cbiAgICB2YXIgcmVkID0gcGFyc2VJbnQoaGV4LnN1YnN0cigwLCAyKSwgMTYpIC8gMjU1LFxuICAgICAgICAgIGdyZWVuID0gcGFyc2VJbnQoaGV4LnN1YnN0cigyLCAyKSwgMTYpIC8gMjU1LFxuICAgICAgICAgIGJsdWUgPSBwYXJzZUludChoZXguc3Vic3RyKDQsIDIpLCAxNikgLyAyNTU7XG5cbiAgICB2YXIgY01heCA9IE1hdGgubWF4KHJlZCwgZ3JlZW4sIGJsdWUpLFxuICAgICAgICAgIGRlbHRhID0gY01heCAtIE1hdGgubWluKHJlZCwgZ3JlZW4sIGJsdWUpLFxuICAgICAgICAgIHNhdHVyYXRpb24gPSBjTWF4ID8gKGRlbHRhIC8gY01heCkgOiAwO1xuXG4gICAgc3dpdGNoIChjTWF4KSB7XG4gICAgICBjYXNlIHJlZDogcmV0dXJuIFsgNjAgKiAoKChncmVlbiAtIGJsdWUpIC8gZGVsdGEpICUgNikgfHwgMCwgc2F0dXJhdGlvbiwgY01heCBdO1xuICAgICAgY2FzZSBncmVlbjogcmV0dXJuIFsgNjAgKiAoKChibHVlIC0gcmVkKSAvIGRlbHRhKSArIDIpIHx8IDAsIHNhdHVyYXRpb24sIGNNYXggXTtcbiAgICAgIGNhc2UgYmx1ZTogcmV0dXJuIFsgNjAgKiAoKChyZWQgLSBncmVlbikgLyBkZWx0YSkgKyA0KSB8fCAwLCBzYXR1cmF0aW9uLCBjTWF4IF07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gSFNWdG9IU0wgKGhzdikge1xuICAgIHZhciBoID0gaHN2WzBdLFxuICAgICAgcyA9IGhzdlsxXS8xMDAsXG4gICAgICB2ID0gaHN2WzJdLzEwMCxcbiAgICAgIGsgPSAoMi1zKSp2O1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIGgsXG4gICAgICBNYXRoLnJvdW5kKHMqdiAvIChrPDEgPyBrIDogMi1rKSAqIDEwMDAwKSAvIDEwMCxcbiAgICAgIGsvMiAqIDEwMFxuICAgIF07XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdUb0ludGVnZXIgKHN0cmluZykge1xuICAgIHZhciB0b3RhbCA9IDBcbiAgICBmb3IgKHZhciBpID0gMDsgaSAhPT0gc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodG90YWwgPj0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIGJyZWFrO1xuICAgICAgdG90YWwgKz0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsXG4gIH1cblxuICAvLyBnZXQgVGhlIHJhbmdlIG9mIGdpdmVuIGh1ZSB3aGVuIG9wdGlvbnMuY291bnQhPTBcbiAgZnVuY3Rpb24gZ2V0UmVhbEh1ZVJhbmdlKGNvbG9ySHVlKVxuICB7IGlmICghaXNOYU4oY29sb3JIdWUpKSB7XG4gICAgdmFyIG51bWJlciA9IHBhcnNlSW50KGNvbG9ySHVlKTtcblxuICAgIGlmIChudW1iZXIgPCAzNjAgJiYgbnVtYmVyID4gMCkge1xuICAgICAgcmV0dXJuIGdldENvbG9ySW5mbyhjb2xvckh1ZSkuaHVlUmFuZ2VcbiAgICB9XG4gIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgY29sb3JIdWUgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgIGlmIChjb2xvckRpY3Rpb25hcnlbY29sb3JIdWVdKSB7XG4gICAgICAgIHZhciBjb2xvciA9IGNvbG9yRGljdGlvbmFyeVtjb2xvckh1ZV07XG5cbiAgICAgICAgaWYgKGNvbG9yLmh1ZVJhbmdlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbG9yLmh1ZVJhbmdlXG4gICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sb3JIdWUubWF0Y2goL14jPyhbMC05QS1GXXszfXxbMC05QS1GXXs2fSkkL2kpKSB7XG4gICAgICAgIHZhciBodWUgPSBIZXhUb0hTQihjb2xvckh1ZSlbMF1cbiAgICAgICAgcmV0dXJuIGdldENvbG9ySW5mbyhodWUpLmh1ZVJhbmdlXG4gICAgfVxuICB9XG5cbiAgICByZXR1cm4gWzAsMzYwXVxufVxuICByZXR1cm4gcmFuZG9tQ29sb3I7XG59KSk7XG4iLCIvLyB3cmFwcGVyIGZvciBub24tbm9kZSBlbnZzXG47KGZ1bmN0aW9uIChzYXgpIHtcblxuc2F4LnBhcnNlciA9IGZ1bmN0aW9uIChzdHJpY3QsIG9wdCkgeyByZXR1cm4gbmV3IFNBWFBhcnNlcihzdHJpY3QsIG9wdCkgfVxuc2F4LlNBWFBhcnNlciA9IFNBWFBhcnNlclxuc2F4LlNBWFN0cmVhbSA9IFNBWFN0cmVhbVxuc2F4LmNyZWF0ZVN0cmVhbSA9IGNyZWF0ZVN0cmVhbVxuXG4vLyBXaGVuIHdlIHBhc3MgdGhlIE1BWF9CVUZGRVJfTEVOR1RIIHBvc2l0aW9uLCBzdGFydCBjaGVja2luZyBmb3IgYnVmZmVyIG92ZXJydW5zLlxuLy8gV2hlbiB3ZSBjaGVjaywgc2NoZWR1bGUgdGhlIG5leHQgY2hlY2sgZm9yIE1BWF9CVUZGRVJfTEVOR1RIIC0gKG1heChidWZmZXIgbGVuZ3RocykpLFxuLy8gc2luY2UgdGhhdCdzIHRoZSBlYXJsaWVzdCB0aGF0IGEgYnVmZmVyIG92ZXJydW4gY291bGQgb2NjdXIuICBUaGlzIHdheSwgY2hlY2tzIGFyZVxuLy8gYXMgcmFyZSBhcyByZXF1aXJlZCwgYnV0IGFzIG9mdGVuIGFzIG5lY2Vzc2FyeSB0byBlbnN1cmUgbmV2ZXIgY3Jvc3NpbmcgdGhpcyBib3VuZC5cbi8vIEZ1cnRoZXJtb3JlLCBidWZmZXJzIGFyZSBvbmx5IHRlc3RlZCBhdCBtb3N0IG9uY2UgcGVyIHdyaXRlKCksIHNvIHBhc3NpbmcgYSB2ZXJ5XG4vLyBsYXJnZSBzdHJpbmcgaW50byB3cml0ZSgpIG1pZ2h0IGhhdmUgdW5kZXNpcmFibGUgZWZmZWN0cywgYnV0IHRoaXMgaXMgbWFuYWdlYWJsZSBieVxuLy8gdGhlIGNhbGxlciwgc28gaXQgaXMgYXNzdW1lZCB0byBiZSBzYWZlLiAgVGh1cywgYSBjYWxsIHRvIHdyaXRlKCkgbWF5LCBpbiB0aGUgZXh0cmVtZVxuLy8gZWRnZSBjYXNlLCByZXN1bHQgaW4gY3JlYXRpbmcgYXQgbW9zdCBvbmUgY29tcGxldGUgY29weSBvZiB0aGUgc3RyaW5nIHBhc3NlZCBpbi5cbi8vIFNldCB0byBJbmZpbml0eSB0byBoYXZlIHVubGltaXRlZCBidWZmZXJzLlxuc2F4Lk1BWF9CVUZGRVJfTEVOR1RIID0gNjQgKiAxMDI0XG5cbnZhciBidWZmZXJzID0gW1xuICBcImNvbW1lbnRcIiwgXCJzZ21sRGVjbFwiLCBcInRleHROb2RlXCIsIFwidGFnTmFtZVwiLCBcImRvY3R5cGVcIixcbiAgXCJwcm9jSW5zdE5hbWVcIiwgXCJwcm9jSW5zdEJvZHlcIiwgXCJlbnRpdHlcIiwgXCJhdHRyaWJOYW1lXCIsXG4gIFwiYXR0cmliVmFsdWVcIiwgXCJjZGF0YVwiLCBcInNjcmlwdFwiXG5dXG5cbnNheC5FVkVOVFMgPSAvLyBmb3IgZGlzY292ZXJhYmlsaXR5LlxuICBbIFwidGV4dFwiXG4gICwgXCJwcm9jZXNzaW5naW5zdHJ1Y3Rpb25cIlxuICAsIFwic2dtbGRlY2xhcmF0aW9uXCJcbiAgLCBcImRvY3R5cGVcIlxuICAsIFwiY29tbWVudFwiXG4gICwgXCJhdHRyaWJ1dGVcIlxuICAsIFwib3BlbnRhZ1wiXG4gICwgXCJjbG9zZXRhZ1wiXG4gICwgXCJvcGVuY2RhdGFcIlxuICAsIFwiY2RhdGFcIlxuICAsIFwiY2xvc2VjZGF0YVwiXG4gICwgXCJlcnJvclwiXG4gICwgXCJlbmRcIlxuICAsIFwicmVhZHlcIlxuICAsIFwic2NyaXB0XCJcbiAgLCBcIm9wZW5uYW1lc3BhY2VcIlxuICAsIFwiY2xvc2VuYW1lc3BhY2VcIlxuICBdXG5cbmZ1bmN0aW9uIFNBWFBhcnNlciAoc3RyaWN0LCBvcHQpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNBWFBhcnNlcikpIHJldHVybiBuZXcgU0FYUGFyc2VyKHN0cmljdCwgb3B0KVxuXG4gIHZhciBwYXJzZXIgPSB0aGlzXG4gIGNsZWFyQnVmZmVycyhwYXJzZXIpXG4gIHBhcnNlci5xID0gcGFyc2VyLmMgPSBcIlwiXG4gIHBhcnNlci5idWZmZXJDaGVja1Bvc2l0aW9uID0gc2F4Lk1BWF9CVUZGRVJfTEVOR1RIXG4gIHBhcnNlci5vcHQgPSBvcHQgfHwge31cbiAgcGFyc2VyLm9wdC5sb3dlcmNhc2UgPSBwYXJzZXIub3B0Lmxvd2VyY2FzZSB8fCBwYXJzZXIub3B0Lmxvd2VyY2FzZXRhZ3NcbiAgcGFyc2VyLmxvb3NlQ2FzZSA9IHBhcnNlci5vcHQubG93ZXJjYXNlID8gXCJ0b0xvd2VyQ2FzZVwiIDogXCJ0b1VwcGVyQ2FzZVwiXG4gIHBhcnNlci50YWdzID0gW11cbiAgcGFyc2VyLmNsb3NlZCA9IHBhcnNlci5jbG9zZWRSb290ID0gcGFyc2VyLnNhd1Jvb3QgPSBmYWxzZVxuICBwYXJzZXIudGFnID0gcGFyc2VyLmVycm9yID0gbnVsbFxuICBwYXJzZXIuc3RyaWN0ID0gISFzdHJpY3RcbiAgcGFyc2VyLm5vc2NyaXB0ID0gISEoc3RyaWN0IHx8IHBhcnNlci5vcHQubm9zY3JpcHQpXG4gIHBhcnNlci5zdGF0ZSA9IFMuQkVHSU5cbiAgcGFyc2VyLkVOVElUSUVTID0gT2JqZWN0LmNyZWF0ZShzYXguRU5USVRJRVMpXG4gIHBhcnNlci5hdHRyaWJMaXN0ID0gW11cblxuICAvLyBuYW1lc3BhY2VzIGZvcm0gYSBwcm90b3R5cGUgY2hhaW4uXG4gIC8vIGl0IGFsd2F5cyBwb2ludHMgYXQgdGhlIGN1cnJlbnQgdGFnLFxuICAvLyB3aGljaCBwcm90b3MgdG8gaXRzIHBhcmVudCB0YWcuXG4gIGlmIChwYXJzZXIub3B0LnhtbG5zKSBwYXJzZXIubnMgPSBPYmplY3QuY3JlYXRlKHJvb3ROUylcblxuICAvLyBtb3N0bHkganVzdCBmb3IgZXJyb3IgcmVwb3J0aW5nXG4gIHBhcnNlci50cmFja1Bvc2l0aW9uID0gcGFyc2VyLm9wdC5wb3NpdGlvbiAhPT0gZmFsc2VcbiAgaWYgKHBhcnNlci50cmFja1Bvc2l0aW9uKSB7XG4gICAgcGFyc2VyLnBvc2l0aW9uID0gcGFyc2VyLmxpbmUgPSBwYXJzZXIuY29sdW1uID0gMFxuICB9XG4gIGVtaXQocGFyc2VyLCBcIm9ucmVhZHlcIilcbn1cblxuaWYgKCFPYmplY3QuY3JlYXRlKSBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKG8pIHtcbiAgZnVuY3Rpb24gZiAoKSB7IHRoaXMuX19wcm90b19fID0gbyB9XG4gIGYucHJvdG90eXBlID0gb1xuICByZXR1cm4gbmV3IGZcbn1cblxuaWYgKCFPYmplY3QuZ2V0UHJvdG90eXBlT2YpIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIChvKSB7XG4gIHJldHVybiBvLl9fcHJvdG9fX1xufVxuXG5pZiAoIU9iamVjdC5rZXlzKSBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIChvKSB7XG4gIHZhciBhID0gW11cbiAgZm9yICh2YXIgaSBpbiBvKSBpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkgYS5wdXNoKGkpXG4gIHJldHVybiBhXG59XG5cbmZ1bmN0aW9uIGNoZWNrQnVmZmVyTGVuZ3RoIChwYXJzZXIpIHtcbiAgdmFyIG1heEFsbG93ZWQgPSBNYXRoLm1heChzYXguTUFYX0JVRkZFUl9MRU5HVEgsIDEwKVxuICAgICwgbWF4QWN0dWFsID0gMFxuICBmb3IgKHZhciBpID0gMCwgbCA9IGJ1ZmZlcnMubGVuZ3RoOyBpIDwgbDsgaSArKykge1xuICAgIHZhciBsZW4gPSBwYXJzZXJbYnVmZmVyc1tpXV0ubGVuZ3RoXG4gICAgaWYgKGxlbiA+IG1heEFsbG93ZWQpIHtcbiAgICAgIC8vIFRleHQvY2RhdGEgbm9kZXMgY2FuIGdldCBiaWcsIGFuZCBzaW5jZSB0aGV5J3JlIGJ1ZmZlcmVkLFxuICAgICAgLy8gd2UgY2FuIGdldCBoZXJlIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zLlxuICAgICAgLy8gQXZvaWQgaXNzdWVzIGJ5IGVtaXR0aW5nIHRoZSB0ZXh0IG5vZGUgbm93LFxuICAgICAgLy8gc28gYXQgbGVhc3QgaXQgd29uJ3QgZ2V0IGFueSBiaWdnZXIuXG4gICAgICBzd2l0Y2ggKGJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgY2FzZSBcInRleHROb2RlXCI6XG4gICAgICAgICAgY2xvc2VUZXh0KHBhcnNlcilcbiAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIFwiY2RhdGFcIjpcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25jZGF0YVwiLCBwYXJzZXIuY2RhdGEpXG4gICAgICAgICAgcGFyc2VyLmNkYXRhID0gXCJcIlxuICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25zY3JpcHRcIiwgcGFyc2VyLnNjcmlwdClcbiAgICAgICAgICBwYXJzZXIuc2NyaXB0ID0gXCJcIlxuICAgICAgICBicmVha1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZXJyb3IocGFyc2VyLCBcIk1heCBidWZmZXIgbGVuZ3RoIGV4Y2VlZGVkOiBcIitidWZmZXJzW2ldKVxuICAgICAgfVxuICAgIH1cbiAgICBtYXhBY3R1YWwgPSBNYXRoLm1heChtYXhBY3R1YWwsIGxlbilcbiAgfVxuICAvLyBzY2hlZHVsZSB0aGUgbmV4dCBjaGVjayBmb3IgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIGJ1ZmZlciBvdmVycnVuLlxuICBwYXJzZXIuYnVmZmVyQ2hlY2tQb3NpdGlvbiA9IChzYXguTUFYX0JVRkZFUl9MRU5HVEggLSBtYXhBY3R1YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGFyc2VyLnBvc2l0aW9uXG59XG5cbmZ1bmN0aW9uIGNsZWFyQnVmZmVycyAocGFyc2VyKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gYnVmZmVycy5sZW5ndGg7IGkgPCBsOyBpICsrKSB7XG4gICAgcGFyc2VyW2J1ZmZlcnNbaV1dID0gXCJcIlxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoQnVmZmVycyAocGFyc2VyKSB7XG4gIGNsb3NlVGV4dChwYXJzZXIpXG4gIGlmIChwYXJzZXIuY2RhdGEgIT09IFwiXCIpIHtcbiAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25jZGF0YVwiLCBwYXJzZXIuY2RhdGEpXG4gICAgcGFyc2VyLmNkYXRhID0gXCJcIlxuICB9XG4gIGlmIChwYXJzZXIuc2NyaXB0ICE9PSBcIlwiKSB7XG4gICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uc2NyaXB0XCIsIHBhcnNlci5zY3JpcHQpXG4gICAgcGFyc2VyLnNjcmlwdCA9IFwiXCJcbiAgfVxufVxuXG5TQVhQYXJzZXIucHJvdG90eXBlID1cbiAgeyBlbmQ6IGZ1bmN0aW9uICgpIHsgZW5kKHRoaXMpIH1cbiAgLCB3cml0ZTogd3JpdGVcbiAgLCByZXN1bWU6IGZ1bmN0aW9uICgpIHsgdGhpcy5lcnJvciA9IG51bGw7IHJldHVybiB0aGlzIH1cbiAgLCBjbG9zZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy53cml0ZShudWxsKSB9XG4gICwgZmx1c2g6IGZ1bmN0aW9uICgpIHsgZmx1c2hCdWZmZXJzKHRoaXMpIH1cbiAgfVxuXG50cnkge1xuICB2YXIgU3RyZWFtID0gcmVxdWlyZShcInN0cmVhbVwiKS5TdHJlYW1cbn0gY2F0Y2ggKGV4KSB7XG4gIHZhciBTdHJlYW0gPSBmdW5jdGlvbiAoKSB7fVxufVxuXG5cbnZhciBzdHJlYW1XcmFwcyA9IHNheC5FVkVOVFMuZmlsdGVyKGZ1bmN0aW9uIChldikge1xuICByZXR1cm4gZXYgIT09IFwiZXJyb3JcIiAmJiBldiAhPT0gXCJlbmRcIlxufSlcblxuZnVuY3Rpb24gY3JlYXRlU3RyZWFtIChzdHJpY3QsIG9wdCkge1xuICByZXR1cm4gbmV3IFNBWFN0cmVhbShzdHJpY3QsIG9wdClcbn1cblxuZnVuY3Rpb24gU0FYU3RyZWFtIChzdHJpY3QsIG9wdCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU0FYU3RyZWFtKSkgcmV0dXJuIG5ldyBTQVhTdHJlYW0oc3RyaWN0LCBvcHQpXG5cbiAgU3RyZWFtLmFwcGx5KHRoaXMpXG5cbiAgdGhpcy5fcGFyc2VyID0gbmV3IFNBWFBhcnNlcihzdHJpY3QsIG9wdClcbiAgdGhpcy53cml0YWJsZSA9IHRydWVcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWVcblxuXG4gIHZhciBtZSA9IHRoaXNcblxuICB0aGlzLl9wYXJzZXIub25lbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgbWUuZW1pdChcImVuZFwiKVxuICB9XG5cbiAgdGhpcy5fcGFyc2VyLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXIpIHtcbiAgICBtZS5lbWl0KFwiZXJyb3JcIiwgZXIpXG5cbiAgICAvLyBpZiBkaWRuJ3QgdGhyb3csIHRoZW4gbWVhbnMgZXJyb3Igd2FzIGhhbmRsZWQuXG4gICAgLy8gZ28gYWhlYWQgYW5kIGNsZWFyIGVycm9yLCBzbyB3ZSBjYW4gd3JpdGUgYWdhaW4uXG4gICAgbWUuX3BhcnNlci5lcnJvciA9IG51bGxcbiAgfVxuXG4gIHRoaXMuX2RlY29kZXIgPSBudWxsO1xuXG4gIHN0cmVhbVdyYXBzLmZvckVhY2goZnVuY3Rpb24gKGV2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCBcIm9uXCIgKyBldiwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBtZS5fcGFyc2VyW1wib25cIiArIGV2XSB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICBpZiAoIWgpIHtcbiAgICAgICAgICBtZS5yZW1vdmVBbGxMaXN0ZW5lcnMoZXYpXG4gICAgICAgICAgcmV0dXJuIG1lLl9wYXJzZXJbXCJvblwiK2V2XSA9IGhcbiAgICAgICAgfVxuICAgICAgICBtZS5vbihldiwgaClcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG4gIH0pXG59XG5cblNBWFN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFN0cmVhbS5wcm90b3R5cGUsXG4gIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IFNBWFN0cmVhbSB9IH0pXG5cblNBWFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBpZiAodHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdHlwZW9mIEJ1ZmZlci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgaWYgKCF0aGlzLl9kZWNvZGVyKSB7XG4gICAgICB2YXIgU0QgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXJcbiAgICAgIHRoaXMuX2RlY29kZXIgPSBuZXcgU0QoJ3V0ZjgnKVxuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fZGVjb2Rlci53cml0ZShkYXRhKTtcbiAgfVxuXG4gIHRoaXMuX3BhcnNlci53cml0ZShkYXRhLnRvU3RyaW5nKCkpXG4gIHRoaXMuZW1pdChcImRhdGFcIiwgZGF0YSlcbiAgcmV0dXJuIHRydWVcbn1cblxuU0FYU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoY2h1bmspIHtcbiAgaWYgKGNodW5rICYmIGNodW5rLmxlbmd0aCkgdGhpcy53cml0ZShjaHVuaylcbiAgdGhpcy5fcGFyc2VyLmVuZCgpXG4gIHJldHVybiB0cnVlXG59XG5cblNBWFN0cmVhbS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZXYsIGhhbmRsZXIpIHtcbiAgdmFyIG1lID0gdGhpc1xuICBpZiAoIW1lLl9wYXJzZXJbXCJvblwiK2V2XSAmJiBzdHJlYW1XcmFwcy5pbmRleE9mKGV2KSAhPT0gLTEpIHtcbiAgICBtZS5fcGFyc2VyW1wib25cIitldl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBbYXJndW1lbnRzWzBdXVxuICAgICAgICAgICAgICAgOiBBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICBhcmdzLnNwbGljZSgwLCAwLCBldilcbiAgICAgIG1lLmVtaXQuYXBwbHkobWUsIGFyZ3MpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFN0cmVhbS5wcm90b3R5cGUub24uY2FsbChtZSwgZXYsIGhhbmRsZXIpXG59XG5cblxuXG4vLyBjaGFyYWN0ZXIgY2xhc3NlcyBhbmQgdG9rZW5zXG52YXIgd2hpdGVzcGFjZSA9IFwiXFxyXFxuXFx0IFwiXG4gIC8vIHRoaXMgcmVhbGx5IG5lZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGggY2hhcmFjdGVyIGNsYXNzZXMuXG4gIC8vIFhNTCBhbGxvd3MgYWxsIG1hbm5lciBvZiByaWRpY3Vsb3VzIG51bWJlcnMgYW5kIGRpZ2l0cy5cbiAgLCBudW1iZXIgPSBcIjAxMjQzNTY3ODlcIlxuICAsIGxldHRlciA9IFwiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwiXG4gIC8vIChMZXR0ZXIgfCBcIl9cIiB8IFwiOlwiKVxuICAsIHF1b3RlID0gXCInXFxcIlwiXG4gICwgZW50aXR5ID0gbnVtYmVyK2xldHRlcitcIiNcIlxuICAsIGF0dHJpYkVuZCA9IHdoaXRlc3BhY2UgKyBcIj5cIlxuICAsIENEQVRBID0gXCJbQ0RBVEFbXCJcbiAgLCBET0NUWVBFID0gXCJET0NUWVBFXCJcbiAgLCBYTUxfTkFNRVNQQUNFID0gXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIlxuICAsIFhNTE5TX05BTUVTUEFDRSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIlxuICAsIHJvb3ROUyA9IHsgeG1sOiBYTUxfTkFNRVNQQUNFLCB4bWxuczogWE1MTlNfTkFNRVNQQUNFIH1cblxuLy8gdHVybiBhbGwgdGhlIHN0cmluZyBjaGFyYWN0ZXIgc2V0cyBpbnRvIGNoYXJhY3RlciBjbGFzcyBvYmplY3RzLlxud2hpdGVzcGFjZSA9IGNoYXJDbGFzcyh3aGl0ZXNwYWNlKVxubnVtYmVyID0gY2hhckNsYXNzKG51bWJlcilcbmxldHRlciA9IGNoYXJDbGFzcyhsZXR0ZXIpXG5cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULU5hbWVTdGFydENoYXJcbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gd29ya3Mgb24gc3RyaW5ncywgYSBzaW5nbGUgY2hhcmFjdGVyIGF0IGEgdGltZVxuLy8gYXMgc3VjaCwgaXQgY2Fubm90IGV2ZXIgc3VwcG9ydCBhc3RyYWwtcGxhbmUgY2hhcmFjdGVycyAoMTAwMDAtRUZGRkYpXG4vLyB3aXRob3V0IGEgc2lnbmlmaWNhbnQgYnJlYWtpbmcgY2hhbmdlIHRvIGVpdGhlciB0aGlzICBwYXJzZXIsIG9yIHRoZVxuLy8gSmF2YVNjcmlwdCBsYW5ndWFnZS4gIEltcGxlbWVudGF0aW9uIG9mIGFuIGVtb2ppLWNhcGFibGUgeG1sIHBhcnNlclxuLy8gaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbnZhciBuYW1lU3RhcnQgPSAvWzpfQS1aYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXS9cblxudmFyIG5hbWVCb2R5ID0gL1s6X0EtWmEtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRFxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDBcXC5cXGQtXS9cblxucXVvdGUgPSBjaGFyQ2xhc3MocXVvdGUpXG5lbnRpdHkgPSBjaGFyQ2xhc3MoZW50aXR5KVxuYXR0cmliRW5kID0gY2hhckNsYXNzKGF0dHJpYkVuZClcblxuZnVuY3Rpb24gY2hhckNsYXNzIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdChcIlwiKS5yZWR1Y2UoZnVuY3Rpb24gKHMsIGMpIHtcbiAgICBzW2NdID0gdHJ1ZVxuICAgIHJldHVybiBzXG4gIH0sIHt9KVxufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cCAoYykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpID09PSAnW29iamVjdCBSZWdFeHBdJ1xufVxuXG5mdW5jdGlvbiBpcyAoY2hhcmNsYXNzLCBjKSB7XG4gIHJldHVybiBpc1JlZ0V4cChjaGFyY2xhc3MpID8gISFjLm1hdGNoKGNoYXJjbGFzcykgOiBjaGFyY2xhc3NbY11cbn1cblxuZnVuY3Rpb24gbm90IChjaGFyY2xhc3MsIGMpIHtcbiAgcmV0dXJuICFpcyhjaGFyY2xhc3MsIGMpXG59XG5cbnZhciBTID0gMFxuc2F4LlNUQVRFID1cbnsgQkVHSU4gICAgICAgICAgICAgICAgICAgICA6IFMrK1xuLCBURVhUICAgICAgICAgICAgICAgICAgICAgIDogUysrIC8vIGdlbmVyYWwgc3R1ZmZcbiwgVEVYVF9FTlRJVFkgICAgICAgICAgICAgICA6IFMrKyAvLyAmYW1wIGFuZCBzdWNoLlxuLCBPUEVOX1dBS0EgICAgICAgICAgICAgICAgIDogUysrIC8vIDxcbiwgU0dNTF9ERUNMICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8IUJMQVJHXG4sIFNHTUxfREVDTF9RVU9URUQgICAgICAgICAgOiBTKysgLy8gPCFCTEFSRyBmb28gXCJiYXJcbiwgRE9DVFlQRSAgICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8IURPQ1RZUEVcbiwgRE9DVFlQRV9RVU9URUQgICAgICAgICAgICA6IFMrKyAvLyA8IURPQ1RZUEUgXCIvL2JsYWhcbiwgRE9DVFlQRV9EVEQgICAgICAgICAgICAgICA6IFMrKyAvLyA8IURPQ1RZUEUgXCIvL2JsYWhcIiBbIC4uLlxuLCBET0NUWVBFX0RURF9RVU9URUQgICAgICAgIDogUysrIC8vIDwhRE9DVFlQRSBcIi8vYmxhaFwiIFsgXCJmb29cbiwgQ09NTUVOVF9TVEFSVElORyAgICAgICAgICA6IFMrKyAvLyA8IS1cbiwgQ09NTUVOVCAgICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8IS0tXG4sIENPTU1FTlRfRU5ESU5HICAgICAgICAgICAgOiBTKysgLy8gPCEtLSBibGFoIC1cbiwgQ09NTUVOVF9FTkRFRCAgICAgICAgICAgICA6IFMrKyAvLyA8IS0tIGJsYWggLS1cbiwgQ0RBVEEgICAgICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8IVtDREFUQVsgc29tZXRoaW5nXG4sIENEQVRBX0VORElORyAgICAgICAgICAgICAgOiBTKysgLy8gXVxuLCBDREFUQV9FTkRJTkdfMiAgICAgICAgICAgIDogUysrIC8vIF1dXG4sIFBST0NfSU5TVCAgICAgICAgICAgICAgICAgOiBTKysgLy8gPD9oaVxuLCBQUk9DX0lOU1RfQk9EWSAgICAgICAgICAgIDogUysrIC8vIDw/aGkgdGhlcmVcbiwgUFJPQ19JTlNUX0VORElORyAgICAgICAgICA6IFMrKyAvLyA8P2hpIFwidGhlcmVcIiA/XG4sIE9QRU5fVEFHICAgICAgICAgICAgICAgICAgOiBTKysgLy8gPHN0cm9uZ1xuLCBPUEVOX1RBR19TTEFTSCAgICAgICAgICAgIDogUysrIC8vIDxzdHJvbmcgL1xuLCBBVFRSSUIgICAgICAgICAgICAgICAgICAgIDogUysrIC8vIDxhXG4sIEFUVFJJQl9OQU1FICAgICAgICAgICAgICAgOiBTKysgLy8gPGEgZm9vXG4sIEFUVFJJQl9OQU1FX1NBV19XSElURSAgICAgOiBTKysgLy8gPGEgZm9vIF9cbiwgQVRUUklCX1ZBTFVFICAgICAgICAgICAgICA6IFMrKyAvLyA8YSBmb289XG4sIEFUVFJJQl9WQUxVRV9RVU9URUQgICAgICAgOiBTKysgLy8gPGEgZm9vPVwiYmFyXG4sIEFUVFJJQl9WQUxVRV9DTE9TRUQgICAgICAgOiBTKysgLy8gPGEgZm9vPVwiYmFyXCJcbiwgQVRUUklCX1ZBTFVFX1VOUVVPVEVEICAgICA6IFMrKyAvLyA8YSBmb289YmFyXG4sIEFUVFJJQl9WQUxVRV9FTlRJVFlfUSAgICAgOiBTKysgLy8gPGZvbyBiYXI9XCImcXVvdDtcIlxuLCBBVFRSSUJfVkFMVUVfRU5USVRZX1UgICAgIDogUysrIC8vIDxmb28gYmFyPSZxdW90O1xuLCBDTE9TRV9UQUcgICAgICAgICAgICAgICAgIDogUysrIC8vIDwvYVxuLCBDTE9TRV9UQUdfU0FXX1dISVRFICAgICAgIDogUysrIC8vIDwvYSAgID5cbiwgU0NSSVBUICAgICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8c2NyaXB0PiAuLi5cbiwgU0NSSVBUX0VORElORyAgICAgICAgICAgICA6IFMrKyAvLyA8c2NyaXB0PiAuLi4gPFxufVxuXG5zYXguRU5USVRJRVMgPVxueyBcImFtcFwiIDogXCImXCJcbiwgXCJndFwiIDogXCI+XCJcbiwgXCJsdFwiIDogXCI8XCJcbiwgXCJxdW90XCIgOiBcIlxcXCJcIlxuLCBcImFwb3NcIiA6IFwiJ1wiXG4sIFwiQUVsaWdcIiA6IDE5OFxuLCBcIkFhY3V0ZVwiIDogMTkzXG4sIFwiQWNpcmNcIiA6IDE5NFxuLCBcIkFncmF2ZVwiIDogMTkyXG4sIFwiQXJpbmdcIiA6IDE5N1xuLCBcIkF0aWxkZVwiIDogMTk1XG4sIFwiQXVtbFwiIDogMTk2XG4sIFwiQ2NlZGlsXCIgOiAxOTlcbiwgXCJFVEhcIiA6IDIwOFxuLCBcIkVhY3V0ZVwiIDogMjAxXG4sIFwiRWNpcmNcIiA6IDIwMlxuLCBcIkVncmF2ZVwiIDogMjAwXG4sIFwiRXVtbFwiIDogMjAzXG4sIFwiSWFjdXRlXCIgOiAyMDVcbiwgXCJJY2lyY1wiIDogMjA2XG4sIFwiSWdyYXZlXCIgOiAyMDRcbiwgXCJJdW1sXCIgOiAyMDdcbiwgXCJOdGlsZGVcIiA6IDIwOVxuLCBcIk9hY3V0ZVwiIDogMjExXG4sIFwiT2NpcmNcIiA6IDIxMlxuLCBcIk9ncmF2ZVwiIDogMjEwXG4sIFwiT3NsYXNoXCIgOiAyMTZcbiwgXCJPdGlsZGVcIiA6IDIxM1xuLCBcIk91bWxcIiA6IDIxNFxuLCBcIlRIT1JOXCIgOiAyMjJcbiwgXCJVYWN1dGVcIiA6IDIxOFxuLCBcIlVjaXJjXCIgOiAyMTlcbiwgXCJVZ3JhdmVcIiA6IDIxN1xuLCBcIlV1bWxcIiA6IDIyMFxuLCBcIllhY3V0ZVwiIDogMjIxXG4sIFwiYWFjdXRlXCIgOiAyMjVcbiwgXCJhY2lyY1wiIDogMjI2XG4sIFwiYWVsaWdcIiA6IDIzMFxuLCBcImFncmF2ZVwiIDogMjI0XG4sIFwiYXJpbmdcIiA6IDIyOVxuLCBcImF0aWxkZVwiIDogMjI3XG4sIFwiYXVtbFwiIDogMjI4XG4sIFwiY2NlZGlsXCIgOiAyMzFcbiwgXCJlYWN1dGVcIiA6IDIzM1xuLCBcImVjaXJjXCIgOiAyMzRcbiwgXCJlZ3JhdmVcIiA6IDIzMlxuLCBcImV0aFwiIDogMjQwXG4sIFwiZXVtbFwiIDogMjM1XG4sIFwiaWFjdXRlXCIgOiAyMzdcbiwgXCJpY2lyY1wiIDogMjM4XG4sIFwiaWdyYXZlXCIgOiAyMzZcbiwgXCJpdW1sXCIgOiAyMzlcbiwgXCJudGlsZGVcIiA6IDI0MVxuLCBcIm9hY3V0ZVwiIDogMjQzXG4sIFwib2NpcmNcIiA6IDI0NFxuLCBcIm9ncmF2ZVwiIDogMjQyXG4sIFwib3NsYXNoXCIgOiAyNDhcbiwgXCJvdGlsZGVcIiA6IDI0NVxuLCBcIm91bWxcIiA6IDI0NlxuLCBcInN6bGlnXCIgOiAyMjNcbiwgXCJ0aG9yblwiIDogMjU0XG4sIFwidWFjdXRlXCIgOiAyNTBcbiwgXCJ1Y2lyY1wiIDogMjUxXG4sIFwidWdyYXZlXCIgOiAyNDlcbiwgXCJ1dW1sXCIgOiAyNTJcbiwgXCJ5YWN1dGVcIiA6IDI1M1xuLCBcInl1bWxcIiA6IDI1NVxuLCBcImNvcHlcIiA6IDE2OVxuLCBcInJlZ1wiIDogMTc0XG4sIFwibmJzcFwiIDogMTYwXG4sIFwiaWV4Y2xcIiA6IDE2MVxuLCBcImNlbnRcIiA6IDE2MlxuLCBcInBvdW5kXCIgOiAxNjNcbiwgXCJjdXJyZW5cIiA6IDE2NFxuLCBcInllblwiIDogMTY1XG4sIFwiYnJ2YmFyXCIgOiAxNjZcbiwgXCJzZWN0XCIgOiAxNjdcbiwgXCJ1bWxcIiA6IDE2OFxuLCBcIm9yZGZcIiA6IDE3MFxuLCBcImxhcXVvXCIgOiAxNzFcbiwgXCJub3RcIiA6IDE3MlxuLCBcInNoeVwiIDogMTczXG4sIFwibWFjclwiIDogMTc1XG4sIFwiZGVnXCIgOiAxNzZcbiwgXCJwbHVzbW5cIiA6IDE3N1xuLCBcInN1cDFcIiA6IDE4NVxuLCBcInN1cDJcIiA6IDE3OFxuLCBcInN1cDNcIiA6IDE3OVxuLCBcImFjdXRlXCIgOiAxODBcbiwgXCJtaWNyb1wiIDogMTgxXG4sIFwicGFyYVwiIDogMTgyXG4sIFwibWlkZG90XCIgOiAxODNcbiwgXCJjZWRpbFwiIDogMTg0XG4sIFwib3JkbVwiIDogMTg2XG4sIFwicmFxdW9cIiA6IDE4N1xuLCBcImZyYWMxNFwiIDogMTg4XG4sIFwiZnJhYzEyXCIgOiAxODlcbiwgXCJmcmFjMzRcIiA6IDE5MFxuLCBcImlxdWVzdFwiIDogMTkxXG4sIFwidGltZXNcIiA6IDIxNVxuLCBcImRpdmlkZVwiIDogMjQ3XG4sIFwiT0VsaWdcIiA6IDMzOFxuLCBcIm9lbGlnXCIgOiAzMzlcbiwgXCJTY2Fyb25cIiA6IDM1MlxuLCBcInNjYXJvblwiIDogMzUzXG4sIFwiWXVtbFwiIDogMzc2XG4sIFwiZm5vZlwiIDogNDAyXG4sIFwiY2lyY1wiIDogNzEwXG4sIFwidGlsZGVcIiA6IDczMlxuLCBcIkFscGhhXCIgOiA5MTNcbiwgXCJCZXRhXCIgOiA5MTRcbiwgXCJHYW1tYVwiIDogOTE1XG4sIFwiRGVsdGFcIiA6IDkxNlxuLCBcIkVwc2lsb25cIiA6IDkxN1xuLCBcIlpldGFcIiA6IDkxOFxuLCBcIkV0YVwiIDogOTE5XG4sIFwiVGhldGFcIiA6IDkyMFxuLCBcIklvdGFcIiA6IDkyMVxuLCBcIkthcHBhXCIgOiA5MjJcbiwgXCJMYW1iZGFcIiA6IDkyM1xuLCBcIk11XCIgOiA5MjRcbiwgXCJOdVwiIDogOTI1XG4sIFwiWGlcIiA6IDkyNlxuLCBcIk9taWNyb25cIiA6IDkyN1xuLCBcIlBpXCIgOiA5MjhcbiwgXCJSaG9cIiA6IDkyOVxuLCBcIlNpZ21hXCIgOiA5MzFcbiwgXCJUYXVcIiA6IDkzMlxuLCBcIlVwc2lsb25cIiA6IDkzM1xuLCBcIlBoaVwiIDogOTM0XG4sIFwiQ2hpXCIgOiA5MzVcbiwgXCJQc2lcIiA6IDkzNlxuLCBcIk9tZWdhXCIgOiA5MzdcbiwgXCJhbHBoYVwiIDogOTQ1XG4sIFwiYmV0YVwiIDogOTQ2XG4sIFwiZ2FtbWFcIiA6IDk0N1xuLCBcImRlbHRhXCIgOiA5NDhcbiwgXCJlcHNpbG9uXCIgOiA5NDlcbiwgXCJ6ZXRhXCIgOiA5NTBcbiwgXCJldGFcIiA6IDk1MVxuLCBcInRoZXRhXCIgOiA5NTJcbiwgXCJpb3RhXCIgOiA5NTNcbiwgXCJrYXBwYVwiIDogOTU0XG4sIFwibGFtYmRhXCIgOiA5NTVcbiwgXCJtdVwiIDogOTU2XG4sIFwibnVcIiA6IDk1N1xuLCBcInhpXCIgOiA5NThcbiwgXCJvbWljcm9uXCIgOiA5NTlcbiwgXCJwaVwiIDogOTYwXG4sIFwicmhvXCIgOiA5NjFcbiwgXCJzaWdtYWZcIiA6IDk2MlxuLCBcInNpZ21hXCIgOiA5NjNcbiwgXCJ0YXVcIiA6IDk2NFxuLCBcInVwc2lsb25cIiA6IDk2NVxuLCBcInBoaVwiIDogOTY2XG4sIFwiY2hpXCIgOiA5NjdcbiwgXCJwc2lcIiA6IDk2OFxuLCBcIm9tZWdhXCIgOiA5NjlcbiwgXCJ0aGV0YXN5bVwiIDogOTc3XG4sIFwidXBzaWhcIiA6IDk3OFxuLCBcInBpdlwiIDogOTgyXG4sIFwiZW5zcFwiIDogODE5NFxuLCBcImVtc3BcIiA6IDgxOTVcbiwgXCJ0aGluc3BcIiA6IDgyMDFcbiwgXCJ6d25qXCIgOiA4MjA0XG4sIFwiendqXCIgOiA4MjA1XG4sIFwibHJtXCIgOiA4MjA2XG4sIFwicmxtXCIgOiA4MjA3XG4sIFwibmRhc2hcIiA6IDgyMTFcbiwgXCJtZGFzaFwiIDogODIxMlxuLCBcImxzcXVvXCIgOiA4MjE2XG4sIFwicnNxdW9cIiA6IDgyMTdcbiwgXCJzYnF1b1wiIDogODIxOFxuLCBcImxkcXVvXCIgOiA4MjIwXG4sIFwicmRxdW9cIiA6IDgyMjFcbiwgXCJiZHF1b1wiIDogODIyMlxuLCBcImRhZ2dlclwiIDogODIyNFxuLCBcIkRhZ2dlclwiIDogODIyNVxuLCBcImJ1bGxcIiA6IDgyMjZcbiwgXCJoZWxsaXBcIiA6IDgyMzBcbiwgXCJwZXJtaWxcIiA6IDgyNDBcbiwgXCJwcmltZVwiIDogODI0MlxuLCBcIlByaW1lXCIgOiA4MjQzXG4sIFwibHNhcXVvXCIgOiA4MjQ5XG4sIFwicnNhcXVvXCIgOiA4MjUwXG4sIFwib2xpbmVcIiA6IDgyNTRcbiwgXCJmcmFzbFwiIDogODI2MFxuLCBcImV1cm9cIiA6IDgzNjRcbiwgXCJpbWFnZVwiIDogODQ2NVxuLCBcIndlaWVycFwiIDogODQ3MlxuLCBcInJlYWxcIiA6IDg0NzZcbiwgXCJ0cmFkZVwiIDogODQ4MlxuLCBcImFsZWZzeW1cIiA6IDg1MDFcbiwgXCJsYXJyXCIgOiA4NTkyXG4sIFwidWFyclwiIDogODU5M1xuLCBcInJhcnJcIiA6IDg1OTRcbiwgXCJkYXJyXCIgOiA4NTk1XG4sIFwiaGFyclwiIDogODU5NlxuLCBcImNyYXJyXCIgOiA4NjI5XG4sIFwibEFyclwiIDogODY1NlxuLCBcInVBcnJcIiA6IDg2NTdcbiwgXCJyQXJyXCIgOiA4NjU4XG4sIFwiZEFyclwiIDogODY1OVxuLCBcImhBcnJcIiA6IDg2NjBcbiwgXCJmb3JhbGxcIiA6IDg3MDRcbiwgXCJwYXJ0XCIgOiA4NzA2XG4sIFwiZXhpc3RcIiA6IDg3MDdcbiwgXCJlbXB0eVwiIDogODcwOVxuLCBcIm5hYmxhXCIgOiA4NzExXG4sIFwiaXNpblwiIDogODcxMlxuLCBcIm5vdGluXCIgOiA4NzEzXG4sIFwibmlcIiA6IDg3MTVcbiwgXCJwcm9kXCIgOiA4NzE5XG4sIFwic3VtXCIgOiA4NzIxXG4sIFwibWludXNcIiA6IDg3MjJcbiwgXCJsb3dhc3RcIiA6IDg3MjdcbiwgXCJyYWRpY1wiIDogODczMFxuLCBcInByb3BcIiA6IDg3MzNcbiwgXCJpbmZpblwiIDogODczNFxuLCBcImFuZ1wiIDogODczNlxuLCBcImFuZFwiIDogODc0M1xuLCBcIm9yXCIgOiA4NzQ0XG4sIFwiY2FwXCIgOiA4NzQ1XG4sIFwiY3VwXCIgOiA4NzQ2XG4sIFwiaW50XCIgOiA4NzQ3XG4sIFwidGhlcmU0XCIgOiA4NzU2XG4sIFwic2ltXCIgOiA4NzY0XG4sIFwiY29uZ1wiIDogODc3M1xuLCBcImFzeW1wXCIgOiA4Nzc2XG4sIFwibmVcIiA6IDg4MDBcbiwgXCJlcXVpdlwiIDogODgwMVxuLCBcImxlXCIgOiA4ODA0XG4sIFwiZ2VcIiA6IDg4MDVcbiwgXCJzdWJcIiA6IDg4MzRcbiwgXCJzdXBcIiA6IDg4MzVcbiwgXCJuc3ViXCIgOiA4ODM2XG4sIFwic3ViZVwiIDogODgzOFxuLCBcInN1cGVcIiA6IDg4MzlcbiwgXCJvcGx1c1wiIDogODg1M1xuLCBcIm90aW1lc1wiIDogODg1NVxuLCBcInBlcnBcIiA6IDg4NjlcbiwgXCJzZG90XCIgOiA4OTAxXG4sIFwibGNlaWxcIiA6IDg5NjhcbiwgXCJyY2VpbFwiIDogODk2OVxuLCBcImxmbG9vclwiIDogODk3MFxuLCBcInJmbG9vclwiIDogODk3MVxuLCBcImxhbmdcIiA6IDkwMDFcbiwgXCJyYW5nXCIgOiA5MDAyXG4sIFwibG96XCIgOiA5Njc0XG4sIFwic3BhZGVzXCIgOiA5ODI0XG4sIFwiY2x1YnNcIiA6IDk4MjdcbiwgXCJoZWFydHNcIiA6IDk4MjlcbiwgXCJkaWFtc1wiIDogOTgzMFxufVxuXG5PYmplY3Qua2V5cyhzYXguRU5USVRJRVMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlID0gc2F4LkVOVElUSUVTW2tleV1cbiAgICB2YXIgcyA9IHR5cGVvZiBlID09PSAnbnVtYmVyJyA/IFN0cmluZy5mcm9tQ2hhckNvZGUoZSkgOiBlXG4gICAgc2F4LkVOVElUSUVTW2tleV0gPSBzXG59KVxuXG5mb3IgKHZhciBTIGluIHNheC5TVEFURSkgc2F4LlNUQVRFW3NheC5TVEFURVtTXV0gPSBTXG5cbi8vIHNob3J0aGFuZFxuUyA9IHNheC5TVEFURVxuXG5mdW5jdGlvbiBlbWl0IChwYXJzZXIsIGV2ZW50LCBkYXRhKSB7XG4gIHBhcnNlcltldmVudF0gJiYgcGFyc2VyW2V2ZW50XShkYXRhKVxufVxuXG5mdW5jdGlvbiBlbWl0Tm9kZSAocGFyc2VyLCBub2RlVHlwZSwgZGF0YSkge1xuICBpZiAocGFyc2VyLnRleHROb2RlKSBjbG9zZVRleHQocGFyc2VyKVxuICBlbWl0KHBhcnNlciwgbm9kZVR5cGUsIGRhdGEpXG59XG5cbmZ1bmN0aW9uIGNsb3NlVGV4dCAocGFyc2VyKSB7XG4gIHBhcnNlci50ZXh0Tm9kZSA9IHRleHRvcHRzKHBhcnNlci5vcHQsIHBhcnNlci50ZXh0Tm9kZSlcbiAgaWYgKHBhcnNlci50ZXh0Tm9kZSkgZW1pdChwYXJzZXIsIFwib250ZXh0XCIsIHBhcnNlci50ZXh0Tm9kZSlcbiAgcGFyc2VyLnRleHROb2RlID0gXCJcIlxufVxuXG5mdW5jdGlvbiB0ZXh0b3B0cyAob3B0LCB0ZXh0KSB7XG4gIGlmIChvcHQudHJpbSkgdGV4dCA9IHRleHQudHJpbSgpXG4gIGlmIChvcHQubm9ybWFsaXplKSB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKVxuICByZXR1cm4gdGV4dFxufVxuXG5mdW5jdGlvbiBlcnJvciAocGFyc2VyLCBlcikge1xuICBjbG9zZVRleHQocGFyc2VyKVxuICBpZiAocGFyc2VyLnRyYWNrUG9zaXRpb24pIHtcbiAgICBlciArPSBcIlxcbkxpbmU6IFwiK3BhcnNlci5saW5lK1xuICAgICAgICAgIFwiXFxuQ29sdW1uOiBcIitwYXJzZXIuY29sdW1uK1xuICAgICAgICAgIFwiXFxuQ2hhcjogXCIrcGFyc2VyLmNcbiAgfVxuICBlciA9IG5ldyBFcnJvcihlcilcbiAgcGFyc2VyLmVycm9yID0gZXJcbiAgZW1pdChwYXJzZXIsIFwib25lcnJvclwiLCBlcilcbiAgcmV0dXJuIHBhcnNlclxufVxuXG5mdW5jdGlvbiBlbmQgKHBhcnNlcikge1xuICBpZiAoIXBhcnNlci5jbG9zZWRSb290KSBzdHJpY3RGYWlsKHBhcnNlciwgXCJVbmNsb3NlZCByb290IHRhZ1wiKVxuICBpZiAoKHBhcnNlci5zdGF0ZSAhPT0gUy5CRUdJTikgJiYgKHBhcnNlci5zdGF0ZSAhPT0gUy5URVhUKSkgZXJyb3IocGFyc2VyLCBcIlVuZXhwZWN0ZWQgZW5kXCIpXG4gIGNsb3NlVGV4dChwYXJzZXIpXG4gIHBhcnNlci5jID0gXCJcIlxuICBwYXJzZXIuY2xvc2VkID0gdHJ1ZVxuICBlbWl0KHBhcnNlciwgXCJvbmVuZFwiKVxuICBTQVhQYXJzZXIuY2FsbChwYXJzZXIsIHBhcnNlci5zdHJpY3QsIHBhcnNlci5vcHQpXG4gIHJldHVybiBwYXJzZXJcbn1cblxuZnVuY3Rpb24gc3RyaWN0RmFpbCAocGFyc2VyLCBtZXNzYWdlKSB7XG4gIGlmICh0eXBlb2YgcGFyc2VyICE9PSAnb2JqZWN0JyB8fCAhKHBhcnNlciBpbnN0YW5jZW9mIFNBWFBhcnNlcikpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgY2FsbCB0byBzdHJpY3RGYWlsJyk7XG4gIGlmIChwYXJzZXIuc3RyaWN0KSBlcnJvcihwYXJzZXIsIG1lc3NhZ2UpXG59XG5cbmZ1bmN0aW9uIG5ld1RhZyAocGFyc2VyKSB7XG4gIGlmICghcGFyc2VyLnN0cmljdCkgcGFyc2VyLnRhZ05hbWUgPSBwYXJzZXIudGFnTmFtZVtwYXJzZXIubG9vc2VDYXNlXSgpXG4gIHZhciBwYXJlbnQgPSBwYXJzZXIudGFnc1twYXJzZXIudGFncy5sZW5ndGggLSAxXSB8fCBwYXJzZXJcbiAgICAsIHRhZyA9IHBhcnNlci50YWcgPSB7IG5hbWUgOiBwYXJzZXIudGFnTmFtZSwgYXR0cmlidXRlcyA6IHt9IH1cblxuICAvLyB3aWxsIGJlIG92ZXJyaWRkZW4gaWYgdGFnIGNvbnRhaWxzIGFuIHhtbG5zPVwiZm9vXCIgb3IgeG1sbnM6Zm9vPVwiYmFyXCJcbiAgaWYgKHBhcnNlci5vcHQueG1sbnMpIHRhZy5ucyA9IHBhcmVudC5uc1xuICBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGggPSAwXG59XG5cbmZ1bmN0aW9uIHFuYW1lIChuYW1lLCBhdHRyaWJ1dGUpIHtcbiAgdmFyIGkgPSBuYW1lLmluZGV4T2YoXCI6XCIpXG4gICAgLCBxdWFsTmFtZSA9IGkgPCAwID8gWyBcIlwiLCBuYW1lIF0gOiBuYW1lLnNwbGl0KFwiOlwiKVxuICAgICwgcHJlZml4ID0gcXVhbE5hbWVbMF1cbiAgICAsIGxvY2FsID0gcXVhbE5hbWVbMV1cblxuICAvLyA8eCBcInhtbG5zXCI9XCJodHRwOi8vZm9vXCI+XG4gIGlmIChhdHRyaWJ1dGUgJiYgbmFtZSA9PT0gXCJ4bWxuc1wiKSB7XG4gICAgcHJlZml4ID0gXCJ4bWxuc1wiXG4gICAgbG9jYWwgPSBcIlwiXG4gIH1cblxuICByZXR1cm4geyBwcmVmaXg6IHByZWZpeCwgbG9jYWw6IGxvY2FsIH1cbn1cblxuZnVuY3Rpb24gYXR0cmliIChwYXJzZXIpIHtcbiAgaWYgKCFwYXJzZXIuc3RyaWN0KSBwYXJzZXIuYXR0cmliTmFtZSA9IHBhcnNlci5hdHRyaWJOYW1lW3BhcnNlci5sb29zZUNhc2VdKClcblxuICBpZiAocGFyc2VyLmF0dHJpYkxpc3QuaW5kZXhPZihwYXJzZXIuYXR0cmliTmFtZSkgIT09IC0xIHx8XG4gICAgICBwYXJzZXIudGFnLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocGFyc2VyLmF0dHJpYk5hbWUpKSB7XG4gICAgcmV0dXJuIHBhcnNlci5hdHRyaWJOYW1lID0gcGFyc2VyLmF0dHJpYlZhbHVlID0gXCJcIlxuICB9XG5cbiAgaWYgKHBhcnNlci5vcHQueG1sbnMpIHtcbiAgICB2YXIgcW4gPSBxbmFtZShwYXJzZXIuYXR0cmliTmFtZSwgdHJ1ZSlcbiAgICAgICwgcHJlZml4ID0gcW4ucHJlZml4XG4gICAgICAsIGxvY2FsID0gcW4ubG9jYWxcblxuICAgIGlmIChwcmVmaXggPT09IFwieG1sbnNcIikge1xuICAgICAgLy8gbmFtZXNwYWNlIGJpbmRpbmcgYXR0cmlidXRlOyBwdXNoIHRoZSBiaW5kaW5nIGludG8gc2NvcGVcbiAgICAgIGlmIChsb2NhbCA9PT0gXCJ4bWxcIiAmJiBwYXJzZXIuYXR0cmliVmFsdWUgIT09IFhNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgc3RyaWN0RmFpbCggcGFyc2VyXG4gICAgICAgICAgICAgICAgICAsIFwieG1sOiBwcmVmaXggbXVzdCBiZSBib3VuZCB0byBcIiArIFhNTF9OQU1FU1BBQ0UgKyBcIlxcblwiXG4gICAgICAgICAgICAgICAgICArIFwiQWN0dWFsOiBcIiArIHBhcnNlci5hdHRyaWJWYWx1ZSApXG4gICAgICB9IGVsc2UgaWYgKGxvY2FsID09PSBcInhtbG5zXCIgJiYgcGFyc2VyLmF0dHJpYlZhbHVlICE9PSBYTUxOU19OQU1FU1BBQ0UpIHtcbiAgICAgICAgc3RyaWN0RmFpbCggcGFyc2VyXG4gICAgICAgICAgICAgICAgICAsIFwieG1sbnM6IHByZWZpeCBtdXN0IGJlIGJvdW5kIHRvIFwiICsgWE1MTlNfTkFNRVNQQUNFICsgXCJcXG5cIlxuICAgICAgICAgICAgICAgICAgKyBcIkFjdHVhbDogXCIgKyBwYXJzZXIuYXR0cmliVmFsdWUgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhZyA9IHBhcnNlci50YWdcbiAgICAgICAgICAsIHBhcmVudCA9IHBhcnNlci50YWdzW3BhcnNlci50YWdzLmxlbmd0aCAtIDFdIHx8IHBhcnNlclxuICAgICAgICBpZiAodGFnLm5zID09PSBwYXJlbnQubnMpIHtcbiAgICAgICAgICB0YWcubnMgPSBPYmplY3QuY3JlYXRlKHBhcmVudC5ucylcbiAgICAgICAgfVxuICAgICAgICB0YWcubnNbbG9jYWxdID0gcGFyc2VyLmF0dHJpYlZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVmZXIgb25hdHRyaWJ1dGUgZXZlbnRzIHVudGlsIGFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBzZWVuXG4gICAgLy8gc28gYW55IG5ldyBiaW5kaW5ncyBjYW4gdGFrZSBlZmZlY3Q7IHByZXNlcnZlIGF0dHJpYnV0ZSBvcmRlclxuICAgIC8vIHNvIGRlZmVycmVkIGV2ZW50cyBjYW4gYmUgZW1pdHRlZCBpbiBkb2N1bWVudCBvcmRlclxuICAgIHBhcnNlci5hdHRyaWJMaXN0LnB1c2goW3BhcnNlci5hdHRyaWJOYW1lLCBwYXJzZXIuYXR0cmliVmFsdWVdKVxuICB9IGVsc2Uge1xuICAgIC8vIGluIG5vbi14bWxucyBtb2RlLCB3ZSBjYW4gZW1pdCB0aGUgZXZlbnQgcmlnaHQgYXdheVxuICAgIHBhcnNlci50YWcuYXR0cmlidXRlc1twYXJzZXIuYXR0cmliTmFtZV0gPSBwYXJzZXIuYXR0cmliVmFsdWVcbiAgICBlbWl0Tm9kZSggcGFyc2VyXG4gICAgICAgICAgICAsIFwib25hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgLCB7IG5hbWU6IHBhcnNlci5hdHRyaWJOYW1lXG4gICAgICAgICAgICAgICwgdmFsdWU6IHBhcnNlci5hdHRyaWJWYWx1ZSB9IClcbiAgfVxuXG4gIHBhcnNlci5hdHRyaWJOYW1lID0gcGFyc2VyLmF0dHJpYlZhbHVlID0gXCJcIlxufVxuXG5mdW5jdGlvbiBvcGVuVGFnIChwYXJzZXIsIHNlbGZDbG9zaW5nKSB7XG4gIGlmIChwYXJzZXIub3B0LnhtbG5zKSB7XG4gICAgLy8gZW1pdCBuYW1lc3BhY2UgYmluZGluZyBldmVudHNcbiAgICB2YXIgdGFnID0gcGFyc2VyLnRhZ1xuXG4gICAgLy8gYWRkIG5hbWVzcGFjZSBpbmZvIHRvIHRhZ1xuICAgIHZhciBxbiA9IHFuYW1lKHBhcnNlci50YWdOYW1lKVxuICAgIHRhZy5wcmVmaXggPSBxbi5wcmVmaXhcbiAgICB0YWcubG9jYWwgPSBxbi5sb2NhbFxuICAgIHRhZy51cmkgPSB0YWcubnNbcW4ucHJlZml4XSB8fCBcIlwiXG5cbiAgICBpZiAodGFnLnByZWZpeCAmJiAhdGFnLnVyaSkge1xuICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiVW5ib3VuZCBuYW1lc3BhY2UgcHJlZml4OiBcIlxuICAgICAgICAgICAgICAgICAgICAgICArIEpTT04uc3RyaW5naWZ5KHBhcnNlci50YWdOYW1lKSlcbiAgICAgIHRhZy51cmkgPSBxbi5wcmVmaXhcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50ID0gcGFyc2VyLnRhZ3NbcGFyc2VyLnRhZ3MubGVuZ3RoIC0gMV0gfHwgcGFyc2VyXG4gICAgaWYgKHRhZy5ucyAmJiBwYXJlbnQubnMgIT09IHRhZy5ucykge1xuICAgICAgT2JqZWN0LmtleXModGFnLm5zKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIGVtaXROb2RlKCBwYXJzZXJcbiAgICAgICAgICAgICAgICAsIFwib25vcGVubmFtZXNwYWNlXCJcbiAgICAgICAgICAgICAgICAsIHsgcHJlZml4OiBwICwgdXJpOiB0YWcubnNbcF0gfSApXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIGhhbmRsZSBkZWZlcnJlZCBvbmF0dHJpYnV0ZSBldmVudHNcbiAgICAvLyBOb3RlOiBkbyBub3QgYXBwbHkgZGVmYXVsdCBucyB0byBhdHRyaWJ1dGVzOlxuICAgIC8vICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8jZGVmYXVsdGluZ1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoOyBpIDwgbDsgaSArKykge1xuICAgICAgdmFyIG52ID0gcGFyc2VyLmF0dHJpYkxpc3RbaV1cbiAgICAgIHZhciBuYW1lID0gbnZbMF1cbiAgICAgICAgLCB2YWx1ZSA9IG52WzFdXG4gICAgICAgICwgcXVhbE5hbWUgPSBxbmFtZShuYW1lLCB0cnVlKVxuICAgICAgICAsIHByZWZpeCA9IHF1YWxOYW1lLnByZWZpeFxuICAgICAgICAsIGxvY2FsID0gcXVhbE5hbWUubG9jYWxcbiAgICAgICAgLCB1cmkgPSBwcmVmaXggPT0gXCJcIiA/IFwiXCIgOiAodGFnLm5zW3ByZWZpeF0gfHwgXCJcIilcbiAgICAgICAgLCBhID0geyBuYW1lOiBuYW1lXG4gICAgICAgICAgICAgICwgdmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICwgcHJlZml4OiBwcmVmaXhcbiAgICAgICAgICAgICAgLCBsb2NhbDogbG9jYWxcbiAgICAgICAgICAgICAgLCB1cmk6IHVyaVxuICAgICAgICAgICAgICB9XG5cbiAgICAgIC8vIGlmIHRoZXJlJ3MgYW55IGF0dHJpYnV0ZXMgd2l0aCBhbiB1bmRlZmluZWQgbmFtZXNwYWNlLFxuICAgICAgLy8gdGhlbiBmYWlsIG9uIHRoZW0gbm93LlxuICAgICAgaWYgKHByZWZpeCAmJiBwcmVmaXggIT0gXCJ4bWxuc1wiICYmICF1cmkpIHtcbiAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiVW5ib3VuZCBuYW1lc3BhY2UgcHJlZml4OiBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICsgSlNPTi5zdHJpbmdpZnkocHJlZml4KSlcbiAgICAgICAgYS51cmkgPSBwcmVmaXhcbiAgICAgIH1cbiAgICAgIHBhcnNlci50YWcuYXR0cmlidXRlc1tuYW1lXSA9IGFcbiAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmF0dHJpYnV0ZVwiLCBhKVxuICAgIH1cbiAgICBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGggPSAwXG4gIH1cblxuICBwYXJzZXIudGFnLmlzU2VsZkNsb3NpbmcgPSAhIXNlbGZDbG9zaW5nXG5cbiAgLy8gcHJvY2VzcyB0aGUgdGFnXG4gIHBhcnNlci5zYXdSb290ID0gdHJ1ZVxuICBwYXJzZXIudGFncy5wdXNoKHBhcnNlci50YWcpXG4gIGVtaXROb2RlKHBhcnNlciwgXCJvbm9wZW50YWdcIiwgcGFyc2VyLnRhZylcbiAgaWYgKCFzZWxmQ2xvc2luZykge1xuICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgPHNjcmlwdD4gaW4gbm9uLXN0cmljdCBtb2RlLlxuICAgIGlmICghcGFyc2VyLm5vc2NyaXB0ICYmIHBhcnNlci50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwic2NyaXB0XCIpIHtcbiAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgIH1cbiAgICBwYXJzZXIudGFnID0gbnVsbFxuICAgIHBhcnNlci50YWdOYW1lID0gXCJcIlxuICB9XG4gIHBhcnNlci5hdHRyaWJOYW1lID0gcGFyc2VyLmF0dHJpYlZhbHVlID0gXCJcIlxuICBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGggPSAwXG59XG5cbmZ1bmN0aW9uIGNsb3NlVGFnIChwYXJzZXIpIHtcbiAgaWYgKCFwYXJzZXIudGFnTmFtZSkge1xuICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIldlaXJkIGVtcHR5IGNsb3NlIHRhZy5cIilcbiAgICBwYXJzZXIudGV4dE5vZGUgKz0gXCI8Lz5cIlxuICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHBhcnNlci5zY3JpcHQpIHtcbiAgICBpZiAocGFyc2VyLnRhZ05hbWUgIT09IFwic2NyaXB0XCIpIHtcbiAgICAgIHBhcnNlci5zY3JpcHQgKz0gXCI8L1wiICsgcGFyc2VyLnRhZ05hbWUgKyBcIj5cIlxuICAgICAgcGFyc2VyLnRhZ05hbWUgPSBcIlwiXG4gICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbnNjcmlwdFwiLCBwYXJzZXIuc2NyaXB0KVxuICAgIHBhcnNlci5zY3JpcHQgPSBcIlwiXG4gIH1cblxuICAvLyBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgY2xvc2luZyB0YWcgYWN0dWFsbHkgZXhpc3RzLlxuICAvLyA8YT48Yj48L2M+PC9iPjwvYT4gd2lsbCBjbG9zZSBldmVyeXRoaW5nLCBvdGhlcndpc2UuXG4gIHZhciB0ID0gcGFyc2VyLnRhZ3MubGVuZ3RoXG4gIHZhciB0YWdOYW1lID0gcGFyc2VyLnRhZ05hbWVcbiAgaWYgKCFwYXJzZXIuc3RyaWN0KSB0YWdOYW1lID0gdGFnTmFtZVtwYXJzZXIubG9vc2VDYXNlXSgpXG4gIHZhciBjbG9zZVRvID0gdGFnTmFtZVxuICB3aGlsZSAodCAtLSkge1xuICAgIHZhciBjbG9zZSA9IHBhcnNlci50YWdzW3RdXG4gICAgaWYgKGNsb3NlLm5hbWUgIT09IGNsb3NlVG8pIHtcbiAgICAgIC8vIGZhaWwgdGhlIGZpcnN0IHRpbWUgaW4gc3RyaWN0IG1vZGVcbiAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIlVuZXhwZWN0ZWQgY2xvc2UgdGFnXCIpXG4gICAgfSBlbHNlIGJyZWFrXG4gIH1cblxuICAvLyBkaWRuJ3QgZmluZCBpdC4gIHdlIGFscmVhZHkgZmFpbGVkIGZvciBzdHJpY3QsIHNvIGp1c3QgYWJvcnQuXG4gIGlmICh0IDwgMCkge1xuICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIlVubWF0Y2hlZCBjbG9zaW5nIHRhZzogXCIrcGFyc2VyLnRhZ05hbWUpXG4gICAgcGFyc2VyLnRleHROb2RlICs9IFwiPC9cIiArIHBhcnNlci50YWdOYW1lICsgXCI+XCJcbiAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICByZXR1cm5cbiAgfVxuICBwYXJzZXIudGFnTmFtZSA9IHRhZ05hbWVcbiAgdmFyIHMgPSBwYXJzZXIudGFncy5sZW5ndGhcbiAgd2hpbGUgKHMgLS0+IHQpIHtcbiAgICB2YXIgdGFnID0gcGFyc2VyLnRhZyA9IHBhcnNlci50YWdzLnBvcCgpXG4gICAgcGFyc2VyLnRhZ05hbWUgPSBwYXJzZXIudGFnLm5hbWVcbiAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25jbG9zZXRhZ1wiLCBwYXJzZXIudGFnTmFtZSlcblxuICAgIHZhciB4ID0ge31cbiAgICBmb3IgKHZhciBpIGluIHRhZy5ucykgeFtpXSA9IHRhZy5uc1tpXVxuXG4gICAgdmFyIHBhcmVudCA9IHBhcnNlci50YWdzW3BhcnNlci50YWdzLmxlbmd0aCAtIDFdIHx8IHBhcnNlclxuICAgIGlmIChwYXJzZXIub3B0LnhtbG5zICYmIHRhZy5ucyAhPT0gcGFyZW50Lm5zKSB7XG4gICAgICAvLyByZW1vdmUgbmFtZXNwYWNlIGJpbmRpbmdzIGludHJvZHVjZWQgYnkgdGFnXG4gICAgICBPYmplY3Qua2V5cyh0YWcubnMpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICAgICAgdmFyIG4gPSB0YWcubnNbcF1cbiAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uY2xvc2VuYW1lc3BhY2VcIiwgeyBwcmVmaXg6IHAsIHVyaTogbiB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgaWYgKHQgPT09IDApIHBhcnNlci5jbG9zZWRSb290ID0gdHJ1ZVxuICBwYXJzZXIudGFnTmFtZSA9IHBhcnNlci5hdHRyaWJWYWx1ZSA9IHBhcnNlci5hdHRyaWJOYW1lID0gXCJcIlxuICBwYXJzZXIuYXR0cmliTGlzdC5sZW5ndGggPSAwXG4gIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxufVxuXG5mdW5jdGlvbiBwYXJzZUVudGl0eSAocGFyc2VyKSB7XG4gIHZhciBlbnRpdHkgPSBwYXJzZXIuZW50aXR5XG4gICAgLCBlbnRpdHlMQyA9IGVudGl0eS50b0xvd2VyQ2FzZSgpXG4gICAgLCBudW1cbiAgICAsIG51bVN0ciA9IFwiXCJcbiAgaWYgKHBhcnNlci5FTlRJVElFU1tlbnRpdHldKVxuICAgIHJldHVybiBwYXJzZXIuRU5USVRJRVNbZW50aXR5XVxuICBpZiAocGFyc2VyLkVOVElUSUVTW2VudGl0eUxDXSlcbiAgICByZXR1cm4gcGFyc2VyLkVOVElUSUVTW2VudGl0eUxDXVxuICBlbnRpdHkgPSBlbnRpdHlMQ1xuICBpZiAoZW50aXR5LmNoYXJBdCgwKSA9PT0gXCIjXCIpIHtcbiAgICBpZiAoZW50aXR5LmNoYXJBdCgxKSA9PT0gXCJ4XCIpIHtcbiAgICAgIGVudGl0eSA9IGVudGl0eS5zbGljZSgyKVxuICAgICAgbnVtID0gcGFyc2VJbnQoZW50aXR5LCAxNilcbiAgICAgIG51bVN0ciA9IG51bS50b1N0cmluZygxNilcbiAgICB9IGVsc2Uge1xuICAgICAgZW50aXR5ID0gZW50aXR5LnNsaWNlKDEpXG4gICAgICBudW0gPSBwYXJzZUludChlbnRpdHksIDEwKVxuICAgICAgbnVtU3RyID0gbnVtLnRvU3RyaW5nKDEwKVxuICAgIH1cbiAgfVxuICBlbnRpdHkgPSBlbnRpdHkucmVwbGFjZSgvXjArLywgXCJcIilcbiAgaWYgKG51bVN0ci50b0xvd2VyQ2FzZSgpICE9PSBlbnRpdHkpIHtcbiAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJJbnZhbGlkIGNoYXJhY3RlciBlbnRpdHlcIilcbiAgICByZXR1cm4gXCImXCIrcGFyc2VyLmVudGl0eSArIFwiO1wiXG4gIH1cblxuICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQobnVtKVxufVxuXG5mdW5jdGlvbiB3cml0ZSAoY2h1bmspIHtcbiAgdmFyIHBhcnNlciA9IHRoaXNcbiAgaWYgKHRoaXMuZXJyb3IpIHRocm93IHRoaXMuZXJyb3JcbiAgaWYgKHBhcnNlci5jbG9zZWQpIHJldHVybiBlcnJvcihwYXJzZXIsXG4gICAgXCJDYW5ub3Qgd3JpdGUgYWZ0ZXIgY2xvc2UuIEFzc2lnbiBhbiBvbnJlYWR5IGhhbmRsZXIuXCIpXG4gIGlmIChjaHVuayA9PT0gbnVsbCkgcmV0dXJuIGVuZChwYXJzZXIpXG4gIHZhciBpID0gMCwgYyA9IFwiXCJcbiAgd2hpbGUgKHBhcnNlci5jID0gYyA9IGNodW5rLmNoYXJBdChpKyspKSB7XG4gICAgaWYgKHBhcnNlci50cmFja1Bvc2l0aW9uKSB7XG4gICAgICBwYXJzZXIucG9zaXRpb24gKytcbiAgICAgIGlmIChjID09PSBcIlxcblwiKSB7XG4gICAgICAgIHBhcnNlci5saW5lICsrXG4gICAgICAgIHBhcnNlci5jb2x1bW4gPSAwXG4gICAgICB9IGVsc2UgcGFyc2VyLmNvbHVtbiArK1xuICAgIH1cbiAgICBzd2l0Y2ggKHBhcnNlci5zdGF0ZSkge1xuXG4gICAgICBjYXNlIFMuQkVHSU46XG4gICAgICAgIGlmIChjID09PSBcIjxcIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9XQUtBXG4gICAgICAgICAgcGFyc2VyLnN0YXJ0VGFnUG9zaXRpb24gPSBwYXJzZXIucG9zaXRpb25cbiAgICAgICAgfSBlbHNlIGlmIChub3Qod2hpdGVzcGFjZSxjKSkge1xuICAgICAgICAgIC8vIGhhdmUgdG8gcHJvY2VzcyB0aGlzIGFzIGEgdGV4dCBub2RlLlxuICAgICAgICAgIC8vIHdlaXJkLCBidXQgaGFwcGVucy5cbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJOb24td2hpdGVzcGFjZSBiZWZvcmUgZmlyc3QgdGFnLlwiKVxuICAgICAgICAgIHBhcnNlci50ZXh0Tm9kZSA9IGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlRFWFQ6XG4gICAgICAgIGlmIChwYXJzZXIuc2F3Um9vdCAmJiAhcGFyc2VyLmNsb3NlZFJvb3QpIHtcbiAgICAgICAgICB2YXIgc3RhcnRpID0gaS0xXG4gICAgICAgICAgd2hpbGUgKGMgJiYgYyE9PVwiPFwiICYmIGMhPT1cIiZcIikge1xuICAgICAgICAgICAgYyA9IGNodW5rLmNoYXJBdChpKyspXG4gICAgICAgICAgICBpZiAoYyAmJiBwYXJzZXIudHJhY2tQb3NpdGlvbikge1xuICAgICAgICAgICAgICBwYXJzZXIucG9zaXRpb24gKytcbiAgICAgICAgICAgICAgaWYgKGMgPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJzZXIubGluZSArK1xuICAgICAgICAgICAgICAgIHBhcnNlci5jb2x1bW4gPSAwXG4gICAgICAgICAgICAgIH0gZWxzZSBwYXJzZXIuY29sdW1uICsrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcnNlci50ZXh0Tm9kZSArPSBjaHVuay5zdWJzdHJpbmcoc3RhcnRpLCBpLTEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IFwiPFwiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1dBS0FcbiAgICAgICAgICBwYXJzZXIuc3RhcnRUYWdQb3NpdGlvbiA9IHBhcnNlci5wb3NpdGlvblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChub3Qod2hpdGVzcGFjZSwgYykgJiYgKCFwYXJzZXIuc2F3Um9vdCB8fCBwYXJzZXIuY2xvc2VkUm9vdCkpXG4gICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJUZXh0IGRhdGEgb3V0c2lkZSBvZiByb290IG5vZGUuXCIpXG4gICAgICAgICAgaWYgKGMgPT09IFwiJlwiKSBwYXJzZXIuc3RhdGUgPSBTLlRFWFRfRU5USVRZXG4gICAgICAgICAgZWxzZSBwYXJzZXIudGV4dE5vZGUgKz0gY1xuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuU0NSSVBUOlxuICAgICAgICAvLyBvbmx5IG5vbi1zdHJpY3RcbiAgICAgICAgaWYgKGMgPT09IFwiPFwiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRfRU5ESU5HXG4gICAgICAgIH0gZWxzZSBwYXJzZXIuc2NyaXB0ICs9IGNcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5TQ1JJUFRfRU5ESU5HOlxuICAgICAgICBpZiAoYyA9PT0gXCIvXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNMT1NFX1RBR1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gXCI8XCIgKyBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLk9QRU5fV0FLQTpcbiAgICAgICAgLy8gZWl0aGVyIGEgLywgPywgISwgb3IgdGV4dCBpcyBjb21pbmcgbmV4dC5cbiAgICAgICAgaWYgKGMgPT09IFwiIVwiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5TR01MX0RFQ0xcbiAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSBcIlwiXG4gICAgICAgIH0gZWxzZSBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICAvLyB3YWl0IGZvciBpdC4uLlxuICAgICAgICB9IGVsc2UgaWYgKGlzKG5hbWVTdGFydCxjKSkge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9UQUdcbiAgICAgICAgICBwYXJzZXIudGFnTmFtZSA9IGNcbiAgICAgICAgfSBlbHNlIGlmIChjID09PSBcIi9cIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0xPU0VfVEFHXG4gICAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSBcIlwiXG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCI/XCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVFxuICAgICAgICAgIHBhcnNlci5wcm9jSW5zdE5hbWUgPSBwYXJzZXIucHJvY0luc3RCb2R5ID0gXCJcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIlVuZW5jb2RlZCA8XCIpXG4gICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIHNvbWUgd2hpdGVzcGFjZSwgdGhlbiBhZGQgdGhhdCBpbi5cbiAgICAgICAgICBpZiAocGFyc2VyLnN0YXJ0VGFnUG9zaXRpb24gKyAxIDwgcGFyc2VyLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICB2YXIgcGFkID0gcGFyc2VyLnBvc2l0aW9uIC0gcGFyc2VyLnN0YXJ0VGFnUG9zaXRpb25cbiAgICAgICAgICAgIGMgPSBuZXcgQXJyYXkocGFkKS5qb2luKFwiIFwiKSArIGNcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyc2VyLnRleHROb2RlICs9IFwiPFwiICsgY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuU0dNTF9ERUNMOlxuICAgICAgICBpZiAoKHBhcnNlci5zZ21sRGVjbCtjKS50b1VwcGVyQ2FzZSgpID09PSBDREFUQSkge1xuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbm9wZW5jZGF0YVwiKVxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFcbiAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLmNkYXRhID0gXCJcIlxuICAgICAgICB9IGVsc2UgaWYgKHBhcnNlci5zZ21sRGVjbCtjID09PSBcIi0tXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRcbiAgICAgICAgICBwYXJzZXIuY29tbWVudCA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSBcIlwiXG4gICAgICAgIH0gZWxzZSBpZiAoKHBhcnNlci5zZ21sRGVjbCtjKS50b1VwcGVyQ2FzZSgpID09PSBET0NUWVBFKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFXG4gICAgICAgICAgaWYgKHBhcnNlci5kb2N0eXBlIHx8IHBhcnNlci5zYXdSb290KSBzdHJpY3RGYWlsKHBhcnNlcixcbiAgICAgICAgICAgIFwiSW5hcHByb3ByaWF0ZWx5IGxvY2F0ZWQgZG9jdHlwZSBkZWNsYXJhdGlvblwiKVxuICAgICAgICAgIHBhcnNlci5kb2N0eXBlID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9IFwiXCJcbiAgICAgICAgfSBlbHNlIGlmIChjID09PSBcIj5cIikge1xuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbnNnbWxkZWNsYXJhdGlvblwiLCBwYXJzZXIuc2dtbERlY2wpXG4gICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICB9IGVsc2UgaWYgKGlzKHF1b3RlLCBjKSkge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0dNTF9ERUNMX1FVT1RFRFxuICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCArPSBjXG4gICAgICAgIH0gZWxzZSBwYXJzZXIuc2dtbERlY2wgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlNHTUxfREVDTF9RVU9URUQ6XG4gICAgICAgIGlmIChjID09PSBwYXJzZXIucSkge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0dNTF9ERUNMXG4gICAgICAgICAgcGFyc2VyLnEgPSBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgcGFyc2VyLnNnbWxEZWNsICs9IGNcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5ET0NUWVBFOlxuICAgICAgICBpZiAoYyA9PT0gXCI+XCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25kb2N0eXBlXCIsIHBhcnNlci5kb2N0eXBlKVxuICAgICAgICAgIHBhcnNlci5kb2N0eXBlID0gdHJ1ZSAvLyBqdXN0IHJlbWVtYmVyIHRoYXQgd2Ugc2F3IGl0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlci5kb2N0eXBlICs9IGNcbiAgICAgICAgICBpZiAoYyA9PT0gXCJbXCIpIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRV9EVERcbiAgICAgICAgICBlbHNlIGlmIChpcyhxdW90ZSwgYykpIHtcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRV9RVU9URURcbiAgICAgICAgICAgIHBhcnNlci5xID0gY1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkRPQ1RZUEVfUVVPVEVEOlxuICAgICAgICBwYXJzZXIuZG9jdHlwZSArPSBjXG4gICAgICAgIGlmIChjID09PSBwYXJzZXIucSkge1xuICAgICAgICAgIHBhcnNlci5xID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuRE9DVFlQRV9EVEQ6XG4gICAgICAgIHBhcnNlci5kb2N0eXBlICs9IGNcbiAgICAgICAgaWYgKGMgPT09IFwiXVwiKSBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVcbiAgICAgICAgZWxzZSBpZiAoaXMocXVvdGUsYykpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfRFREX1FVT1RFRFxuICAgICAgICAgIHBhcnNlci5xID0gY1xuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuRE9DVFlQRV9EVERfUVVPVEVEOlxuICAgICAgICBwYXJzZXIuZG9jdHlwZSArPSBjXG4gICAgICAgIGlmIChjID09PSBwYXJzZXIucSkge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRV9EVERcbiAgICAgICAgICBwYXJzZXIucSA9IFwiXCJcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkNPTU1FTlQ6XG4gICAgICAgIGlmIChjID09PSBcIi1cIikgcGFyc2VyLnN0YXRlID0gUy5DT01NRU5UX0VORElOR1xuICAgICAgICBlbHNlIHBhcnNlci5jb21tZW50ICs9IGNcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5DT01NRU5UX0VORElORzpcbiAgICAgICAgaWYgKGMgPT09IFwiLVwiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DT01NRU5UX0VOREVEXG4gICAgICAgICAgcGFyc2VyLmNvbW1lbnQgPSB0ZXh0b3B0cyhwYXJzZXIub3B0LCBwYXJzZXIuY29tbWVudClcbiAgICAgICAgICBpZiAocGFyc2VyLmNvbW1lbnQpIGVtaXROb2RlKHBhcnNlciwgXCJvbmNvbW1lbnRcIiwgcGFyc2VyLmNvbW1lbnQpXG4gICAgICAgICAgcGFyc2VyLmNvbW1lbnQgPSBcIlwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VyLmNvbW1lbnQgKz0gXCItXCIgKyBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DT01NRU5UXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5DT01NRU5UX0VOREVEOlxuICAgICAgICBpZiAoYyAhPT0gXCI+XCIpIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJNYWxmb3JtZWQgY29tbWVudFwiKVxuICAgICAgICAgIC8vIGFsbG93IDwhLS0gYmxhaCAtLSBibG9vIC0tPiBpbiBub24tc3RyaWN0IG1vZGUsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgYSBjb21tZW50IG9mIFwiIGJsYWggLS0gYmxvbyBcIlxuICAgICAgICAgIHBhcnNlci5jb21tZW50ICs9IFwiLS1cIiArIGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNPTU1FTlRcbiAgICAgICAgfSBlbHNlIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkNEQVRBOlxuICAgICAgICBpZiAoYyA9PT0gXCJdXCIpIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFfRU5ESU5HXG4gICAgICAgIGVsc2UgcGFyc2VyLmNkYXRhICs9IGNcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5DREFUQV9FTkRJTkc6XG4gICAgICAgIGlmIChjID09PSBcIl1cIikgcGFyc2VyLnN0YXRlID0gUy5DREFUQV9FTkRJTkdfMlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBwYXJzZXIuY2RhdGEgKz0gXCJdXCIgKyBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DREFUQVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQ0RBVEFfRU5ESU5HXzI6XG4gICAgICAgIGlmIChjID09PSBcIj5cIikge1xuICAgICAgICAgIGlmIChwYXJzZXIuY2RhdGEpIGVtaXROb2RlKHBhcnNlciwgXCJvbmNkYXRhXCIsIHBhcnNlci5jZGF0YSlcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25jbG9zZWNkYXRhXCIpXG4gICAgICAgICAgcGFyc2VyLmNkYXRhID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuVEVYVFxuICAgICAgICB9IGVsc2UgaWYgKGMgPT09IFwiXVwiKSB7XG4gICAgICAgICAgcGFyc2VyLmNkYXRhICs9IFwiXVwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VyLmNkYXRhICs9IFwiXV1cIiArIGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5QUk9DX0lOU1Q6XG4gICAgICAgIGlmIChjID09PSBcIj9cIikgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfRU5ESU5HXG4gICAgICAgIGVsc2UgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVF9CT0RZXG4gICAgICAgIGVsc2UgcGFyc2VyLnByb2NJbnN0TmFtZSArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuUFJPQ19JTlNUX0JPRFk6XG4gICAgICAgIGlmICghcGFyc2VyLnByb2NJbnN0Qm9keSAmJiBpcyh3aGl0ZXNwYWNlLCBjKSkgY29udGludWVcbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gXCI/XCIpIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUX0VORElOR1xuICAgICAgICBlbHNlIHBhcnNlci5wcm9jSW5zdEJvZHkgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlBST0NfSU5TVF9FTkRJTkc6XG4gICAgICAgIGlmIChjID09PSBcIj5cIikge1xuICAgICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbnByb2Nlc3NpbmdpbnN0cnVjdGlvblwiLCB7XG4gICAgICAgICAgICBuYW1lIDogcGFyc2VyLnByb2NJbnN0TmFtZSxcbiAgICAgICAgICAgIGJvZHkgOiBwYXJzZXIucHJvY0luc3RCb2R5XG4gICAgICAgICAgfSlcbiAgICAgICAgICBwYXJzZXIucHJvY0luc3ROYW1lID0gcGFyc2VyLnByb2NJbnN0Qm9keSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZXIucHJvY0luc3RCb2R5ICs9IFwiP1wiICsgY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUX0JPRFlcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLk9QRU5fVEFHOlxuICAgICAgICBpZiAoaXMobmFtZUJvZHksIGMpKSBwYXJzZXIudGFnTmFtZSArPSBjXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIG5ld1RhZyhwYXJzZXIpXG4gICAgICAgICAgaWYgKGMgPT09IFwiPlwiKSBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgICBlbHNlIGlmIChjID09PSBcIi9cIikgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1RBR19TTEFTSFxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vdCh3aGl0ZXNwYWNlLCBjKSkgc3RyaWN0RmFpbChcbiAgICAgICAgICAgICAgcGFyc2VyLCBcIkludmFsaWQgY2hhcmFjdGVyIGluIHRhZyBuYW1lXCIpXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLk9QRU5fVEFHX1NMQVNIOlxuICAgICAgICBpZiAoYyA9PT0gXCI+XCIpIHtcbiAgICAgICAgICBvcGVuVGFnKHBhcnNlciwgdHJ1ZSlcbiAgICAgICAgICBjbG9zZVRhZyhwYXJzZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiRm9yd2FyZC1zbGFzaCBpbiBvcGVuaW5nIHRhZyBub3QgZm9sbG93ZWQgYnkgPlwiKVxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5BVFRSSUI6XG4gICAgICAgIC8vIGhhdmVuJ3QgcmVhZCB0aGUgYXR0cmlidXRlIG5hbWUgeWV0LlxuICAgICAgICBpZiAoaXMod2hpdGVzcGFjZSwgYykpIGNvbnRpbnVlXG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFwiPlwiKSBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gXCIvXCIpIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9UQUdfU0xBU0hcbiAgICAgICAgZWxzZSBpZiAoaXMobmFtZVN0YXJ0LCBjKSkge1xuICAgICAgICAgIHBhcnNlci5hdHRyaWJOYW1lID0gY1xuICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9OQU1FXG4gICAgICAgIH0gZWxzZSBzdHJpY3RGYWlsKHBhcnNlciwgXCJJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lXCIpXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQVRUUklCX05BTUU6XG4gICAgICAgIGlmIChjID09PSBcIj1cIikgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVcbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gXCI+XCIpIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJBdHRyaWJ1dGUgd2l0aG91dCB2YWx1ZVwiKVxuICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9IHBhcnNlci5hdHRyaWJOYW1lXG4gICAgICAgICAgYXR0cmliKHBhcnNlcilcbiAgICAgICAgICBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRV9TQVdfV0hJVEVcbiAgICAgICAgZWxzZSBpZiAoaXMobmFtZUJvZHksIGMpKSBwYXJzZXIuYXR0cmliTmFtZSArPSBjXG4gICAgICAgIGVsc2Ugc3RyaWN0RmFpbChwYXJzZXIsIFwiSW52YWxpZCBhdHRyaWJ1dGUgbmFtZVwiKVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkFUVFJJQl9OQU1FX1NBV19XSElURTpcbiAgICAgICAgaWYgKGMgPT09IFwiPVwiKSBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRVxuICAgICAgICBlbHNlIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkgY29udGludWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiQXR0cmlidXRlIHdpdGhvdXQgdmFsdWVcIilcbiAgICAgICAgICBwYXJzZXIudGFnLmF0dHJpYnV0ZXNbcGFyc2VyLmF0dHJpYk5hbWVdID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5hdHRyaWJWYWx1ZSA9IFwiXCJcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25hdHRyaWJ1dGVcIixcbiAgICAgICAgICAgICAgICAgICB7IG5hbWUgOiBwYXJzZXIuYXR0cmliTmFtZSwgdmFsdWUgOiBcIlwiIH0pXG4gICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBcIlwiXG4gICAgICAgICAgaWYgKGMgPT09IFwiPlwiKSBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgICBlbHNlIGlmIChpcyhuYW1lU3RhcnQsIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IGNcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX05BTUVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiSW52YWxpZCBhdHRyaWJ1dGUgbmFtZVwiKVxuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUU6XG4gICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkgY29udGludWVcbiAgICAgICAgZWxzZSBpZiAoaXMocXVvdGUsIGMpKSB7XG4gICAgICAgICAgcGFyc2VyLnEgPSBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfUVVPVEVEXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiVW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlXCIpXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVfVU5RVU9URURcbiAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSBjXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfUVVPVEVEOlxuICAgICAgICBpZiAoYyAhPT0gcGFyc2VyLnEpIHtcbiAgICAgICAgICBpZiAoYyA9PT0gXCImXCIpIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX0VOVElUWV9RXG4gICAgICAgICAgZWxzZSBwYXJzZXIuYXR0cmliVmFsdWUgKz0gY1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmliKHBhcnNlcilcbiAgICAgICAgcGFyc2VyLnEgPSBcIlwiXG4gICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX0NMT1NFRFxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9DTE9TRUQ6XG4gICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCI+XCIpIG9wZW5UYWcocGFyc2VyKVxuICAgICAgICBlbHNlIGlmIChjID09PSBcIi9cIikgcGFyc2VyLnN0YXRlID0gUy5PUEVOX1RBR19TTEFTSFxuICAgICAgICBlbHNlIGlmIChpcyhuYW1lU3RhcnQsIGMpKSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiTm8gd2hpdGVzcGFjZSBiZXR3ZWVuIGF0dHJpYnV0ZXNcIilcbiAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IGNcbiAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRVxuICAgICAgICB9IGVsc2Ugc3RyaWN0RmFpbChwYXJzZXIsIFwiSW52YWxpZCBhdHRyaWJ1dGUgbmFtZVwiKVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9VTlFVT1RFRDpcbiAgICAgICAgaWYgKG5vdChhdHRyaWJFbmQsYykpIHtcbiAgICAgICAgICBpZiAoYyA9PT0gXCImXCIpIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX0VOVElUWV9VXG4gICAgICAgICAgZWxzZSBwYXJzZXIuYXR0cmliVmFsdWUgKz0gY1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmliKHBhcnNlcilcbiAgICAgICAgaWYgKGMgPT09IFwiPlwiKSBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgZWxzZSBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQlxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkNMT1NFX1RBRzpcbiAgICAgICAgaWYgKCFwYXJzZXIudGFnTmFtZSkge1xuICAgICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkgY29udGludWVcbiAgICAgICAgICBlbHNlIGlmIChub3QobmFtZVN0YXJ0LCBjKSkge1xuICAgICAgICAgICAgaWYgKHBhcnNlci5zY3JpcHQpIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnNjcmlwdCArPSBcIjwvXCIgKyBjXG4gICAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJJbnZhbGlkIHRhZ25hbWUgaW4gY2xvc2luZyB0YWcuXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHBhcnNlci50YWdOYW1lID0gY1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFwiPlwiKSBjbG9zZVRhZyhwYXJzZXIpXG4gICAgICAgIGVsc2UgaWYgKGlzKG5hbWVCb2R5LCBjKSkgcGFyc2VyLnRhZ05hbWUgKz0gY1xuICAgICAgICBlbHNlIGlmIChwYXJzZXIuc2NyaXB0KSB7XG4gICAgICAgICAgcGFyc2VyLnNjcmlwdCArPSBcIjwvXCIgKyBwYXJzZXIudGFnTmFtZVxuICAgICAgICAgIHBhcnNlci50YWdOYW1lID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5vdCh3aGl0ZXNwYWNlLCBjKSkgc3RyaWN0RmFpbChwYXJzZXIsXG4gICAgICAgICAgICBcIkludmFsaWQgdGFnbmFtZSBpbiBjbG9zaW5nIHRhZ1wiKVxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0xPU0VfVEFHX1NBV19XSElURVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQ0xPU0VfVEFHX1NBV19XSElURTpcbiAgICAgICAgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSBjb250aW51ZVxuICAgICAgICBpZiAoYyA9PT0gXCI+XCIpIGNsb3NlVGFnKHBhcnNlcilcbiAgICAgICAgZWxzZSBzdHJpY3RGYWlsKHBhcnNlciwgXCJJbnZhbGlkIGNoYXJhY3RlcnMgaW4gY2xvc2luZyB0YWdcIilcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5URVhUX0VOVElUWTpcbiAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfRU5USVRZX1E6XG4gICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0VOVElUWV9VOlxuICAgICAgICBzd2l0Y2gocGFyc2VyLnN0YXRlKSB7XG4gICAgICAgICAgY2FzZSBTLlRFWFRfRU5USVRZOlxuICAgICAgICAgICAgdmFyIHJldHVyblN0YXRlID0gUy5URVhULCBidWZmZXIgPSBcInRleHROb2RlXCJcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfUTpcbiAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX1FVT1RFRCwgYnVmZmVyID0gXCJhdHRyaWJWYWx1ZVwiXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfRU5USVRZX1U6XG4gICAgICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9VTlFVT1RFRCwgYnVmZmVyID0gXCJhdHRyaWJWYWx1ZVwiXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYyA9PT0gXCI7XCIpIHtcbiAgICAgICAgICBwYXJzZXJbYnVmZmVyXSArPSBwYXJzZUVudGl0eShwYXJzZXIpXG4gICAgICAgICAgcGFyc2VyLmVudGl0eSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSByZXR1cm5TdGF0ZVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzKGVudGl0eSwgYykpIHBhcnNlci5lbnRpdHkgKz0gY1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJJbnZhbGlkIGNoYXJhY3RlciBlbnRpdHlcIilcbiAgICAgICAgICBwYXJzZXJbYnVmZmVyXSArPSBcIiZcIiArIHBhcnNlci5lbnRpdHkgKyBjXG4gICAgICAgICAgcGFyc2VyLmVudGl0eSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSByZXR1cm5TdGF0ZVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocGFyc2VyLCBcIlVua25vd24gc3RhdGU6IFwiICsgcGFyc2VyLnN0YXRlKVxuICAgIH1cbiAgfSAvLyB3aGlsZVxuICAvLyBjZGF0YSBibG9ja3MgY2FuIGdldCB2ZXJ5IGJpZyB1bmRlciBub3JtYWwgY29uZGl0aW9ucy4gZW1pdCBhbmQgbW92ZSBvbi5cbiAgLy8gaWYgKHBhcnNlci5zdGF0ZSA9PT0gUy5DREFUQSAmJiBwYXJzZXIuY2RhdGEpIHtcbiAgLy8gICBlbWl0Tm9kZShwYXJzZXIsIFwib25jZGF0YVwiLCBwYXJzZXIuY2RhdGEpXG4gIC8vICAgcGFyc2VyLmNkYXRhID0gXCJcIlxuICAvLyB9XG4gIGlmIChwYXJzZXIucG9zaXRpb24gPj0gcGFyc2VyLmJ1ZmZlckNoZWNrUG9zaXRpb24pIGNoZWNrQnVmZmVyTGVuZ3RoKHBhcnNlcilcbiAgcmV0dXJuIHBhcnNlclxufVxuXG4vKiEgaHR0cDovL210aHMuYmUvZnJvbWNvZGVwb2ludCB2MC4xLjAgYnkgQG1hdGhpYXMgKi9cbmlmICghU3RyaW5nLmZyb21Db2RlUG9pbnQpIHtcbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICAgICAgICAgICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgICAgICAgICAgICAgdmFyIGZyb21Db2RlUG9pbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfU0laRSA9IDB4NDAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlVW5pdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaWdoU3Vycm9nYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvd1N1cnJvZ2F0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA8IDAgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVBvaW50ID4gMHgxMEZGRkYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvb3IoY29kZVBvaW50KSAhPSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCBjb2RlIHBvaW50OiAnICsgY29kZVBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZVBvaW50IDw9IDB4RkZGRikgeyAvLyBCTVAgY29kZSBwb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZyNzdXJyb2dhdGUtZm9ybXVsYWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoU3Vycm9nYXRlID0gKGNvZGVQb2ludCA+PiAxMCkgKyAweEQ4MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93U3Vycm9nYXRlID0gKGNvZGVQb2ludCAlIDB4NDAwKSArIDB4REMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChoaWdoU3Vycm9nYXRlLCBsb3dTdXJyb2dhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCArIDEgPT0gbGVuZ3RoIHx8IGNvZGVVbml0cy5sZW5ndGggPiBNQVhfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdGcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY29kZVVuaXRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlVW5pdHMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJpbmcsICdmcm9tQ29kZVBvaW50Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBmcm9tQ29kZVBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mcm9tQ29kZVBvaW50ID0gZnJvbUNvZGVQb2ludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0oKSk7XG59XG5cbn0pKHR5cGVvZiBleHBvcnRzID09PSBcInVuZGVmaW5lZFwiID8gc2F4ID0ge30gOiBleHBvcnRzKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgRW1pdHRlciA9IHJlcXVpcmUoJ2VtaXR0ZXInKTtcblxuZnVuY3Rpb24gU3RyZWFtKCkge1xuICBFbWl0dGVyLmNhbGwodGhpcyk7XG59XG5TdHJlYW0ucHJvdG90eXBlID0gbmV3IEVtaXR0ZXIoKTtcbm1vZHVsZS5leHBvcnRzID0gU3RyZWFtO1xuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC40LnhcblN0cmVhbS5TdHJlYW0gPSBTdHJlYW07XG5cblN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKGRlc3QsIG9wdGlvbnMpIHtcbiAgdmFyIHNvdXJjZSA9IHRoaXM7XG5cbiAgZnVuY3Rpb24gb25kYXRhKGNodW5rKSB7XG4gICAgaWYgKGRlc3Qud3JpdGFibGUpIHtcbiAgICAgIGlmIChmYWxzZSA9PT0gZGVzdC53cml0ZShjaHVuaykgJiYgc291cmNlLnBhdXNlKSB7XG4gICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNvdXJjZS5vbignZGF0YScsIG9uZGF0YSk7XG5cbiAgZnVuY3Rpb24gb25kcmFpbigpIHtcbiAgICBpZiAoc291cmNlLnJlYWRhYmxlICYmIHNvdXJjZS5yZXN1bWUpIHtcbiAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICB9XG4gIH1cblxuICBkZXN0Lm9uKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gIC8vIElmIHRoZSAnZW5kJyBvcHRpb24gaXMgbm90IHN1cHBsaWVkLCBkZXN0LmVuZCgpIHdpbGwgYmUgY2FsbGVkIHdoZW5cbiAgLy8gc291cmNlIGdldHMgdGhlICdlbmQnIG9yICdjbG9zZScgZXZlbnRzLiAgT25seSBkZXN0LmVuZCgpIG9uY2UuXG4gIGlmICghZGVzdC5faXNTdGRpbyAmJiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5lbmQgIT09IGZhbHNlKSkge1xuICAgIHNvdXJjZS5vbignZW5kJywgb25lbmQpO1xuICAgIHNvdXJjZS5vbignY2xvc2UnLCBvbmNsb3NlKTtcbiAgfVxuXG4gIHZhciBkaWRPbkVuZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBvbmVuZCgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBkZXN0LmVuZCgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBvbmNsb3NlKCkge1xuICAgIGlmIChkaWRPbkVuZCkgcmV0dXJuO1xuICAgIGRpZE9uRW5kID0gdHJ1ZTtcblxuICAgIGlmICh0eXBlb2YgZGVzdC5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSBkZXN0LmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8vIGRvbid0IGxlYXZlIGRhbmdsaW5nIHBpcGVzIHdoZW4gdGhlcmUgYXJlIGVycm9ycy5cbiAgZnVuY3Rpb24gb25lcnJvcihlcikge1xuICAgIGNsZWFudXAoKTtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKCdlcnJvcicpKSB7XG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkIHN0cmVhbSBlcnJvciBpbiBwaXBlLlxuICAgIH1cbiAgfVxuXG4gIHNvdXJjZS5vbignZXJyb3InLCBvbmVycm9yKTtcbiAgZGVzdC5vbignZXJyb3InLCBvbmVycm9yKTtcblxuICAvLyByZW1vdmUgYWxsIHRoZSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkLlxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIHNvdXJjZS5vZmYoJ2RhdGEnLCBvbmRhdGEpO1xuICAgIGRlc3Qub2ZmKCdkcmFpbicsIG9uZHJhaW4pO1xuXG4gICAgc291cmNlLm9mZignZW5kJywgb25lbmQpO1xuICAgIHNvdXJjZS5vZmYoJ2Nsb3NlJywgb25jbG9zZSk7XG5cbiAgICBzb3VyY2Uub2ZmKCdlcnJvcicsIG9uZXJyb3IpO1xuICAgIGRlc3Qub2ZmKCdlcnJvcicsIG9uZXJyb3IpO1xuXG4gICAgc291cmNlLm9mZignZW5kJywgY2xlYW51cCk7XG4gICAgc291cmNlLm9mZignY2xvc2UnLCBjbGVhbnVwKTtcblxuICAgIGRlc3Qub2ZmKCdlbmQnLCBjbGVhbnVwKTtcbiAgICBkZXN0Lm9mZignY2xvc2UnLCBjbGVhbnVwKTtcbiAgfVxuXG4gIHNvdXJjZS5vbignZW5kJywgY2xlYW51cCk7XG4gIHNvdXJjZS5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0Lm9uKCdlbmQnLCBjbGVhbnVwKTtcbiAgZGVzdC5vbignY2xvc2UnLCBjbGVhbnVwKTtcblxuICBkZXN0LmVtaXQoJ3BpcGUnLCBzb3VyY2UpO1xuXG4gIC8vIEFsbG93IGZvciB1bml4LWxpa2UgdXNhZ2U6IEEucGlwZShCKS5waXBlKEMpXG4gIHJldHVybiBkZXN0O1xufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLyo8cmVwbGFjZW1lbnQ+Ki9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xuLyo8L3JlcGxhY2VtZW50PiovXG5cbnZhciBpc0VuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmcgfHwgZnVuY3Rpb24gKGVuY29kaW5nKSB7XG4gIGVuY29kaW5nID0gJycgKyBlbmNvZGluZztcbiAgc3dpdGNoIChlbmNvZGluZyAmJiBlbmNvZGluZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpjYXNlICd1dGY4JzpjYXNlICd1dGYtOCc6Y2FzZSAnYXNjaWknOmNhc2UgJ2JpbmFyeSc6Y2FzZSAnYmFzZTY0JzpjYXNlICd1Y3MyJzpjYXNlICd1Y3MtMic6Y2FzZSAndXRmMTZsZSc6Y2FzZSAndXRmLTE2bGUnOmNhc2UgJ3Jhdyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKSB7XG4gIGlmICghZW5jKSByZXR1cm4gJ3V0ZjgnO1xuICB2YXIgcmV0cmllZDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuYykge1xuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiAndXRmOCc7XG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gJ3V0ZjE2bGUnO1xuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiAnbGF0aW4xJztcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gZW5jO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHJldHJpZWQpIHJldHVybjsgLy8gdW5kZWZpbmVkXG4gICAgICAgIGVuYyA9ICgnJyArIGVuYykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0cmllZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG4vLyBEbyBub3QgY2FjaGUgYEJ1ZmZlci5pc0VuY29kaW5nYCB3aGVuIGNoZWNraW5nIGVuY29kaW5nIG5hbWVzIGFzIHNvbWVcbi8vIG1vZHVsZXMgbW9ua2V5LXBhdGNoIGl0IHRvIHN1cHBvcnQgYWRkaXRpb25hbCBlbmNvZGluZ3NcbmZ1bmN0aW9uIG5vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICB2YXIgbmVuYyA9IF9ub3JtYWxpemVFbmNvZGluZyhlbmMpO1xuICBpZiAodHlwZW9mIG5lbmMgIT09ICdzdHJpbmcnICYmIChCdWZmZXIuaXNFbmNvZGluZyA9PT0gaXNFbmNvZGluZyB8fCAhaXNFbmNvZGluZyhlbmMpKSkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jKTtcbiAgcmV0dXJuIG5lbmMgfHwgZW5jO1xufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuXG5leHBvcnRzLlN0cmluZ0RlY29kZXIgPSBTdHJpbmdEZWNvZGVyO1xuZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gbm9ybWFsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuICB2YXIgbmI7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgdGhpcy50ZXh0ID0gdXRmMTZUZXh0O1xuICAgICAgdGhpcy5lbmQgPSB1dGYxNkVuZDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgdGhpcy5maWxsTGFzdCA9IHV0ZjhGaWxsTGFzdDtcbiAgICAgIG5iID0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICB0aGlzLnRleHQgPSBiYXNlNjRUZXh0O1xuICAgICAgdGhpcy5lbmQgPSBiYXNlNjRFbmQ7XG4gICAgICBuYiA9IDM7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy53cml0ZSA9IHNpbXBsZVdyaXRlO1xuICAgICAgdGhpcy5lbmQgPSBzaW1wbGVFbmQ7XG4gICAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIHRoaXMubGFzdFRvdGFsID0gMDtcbiAgdGhpcy5sYXN0Q2hhciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuYik7XG59XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICB2YXIgcjtcbiAgdmFyIGk7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgciA9IHRoaXMuZmlsbExhc3QoYnVmKTtcbiAgICBpZiAociA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgaSA9IHRoaXMubGFzdE5lZWQ7XG4gICAgdGhpcy5sYXN0TmVlZCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgaSA9IDA7XG4gIH1cbiAgaWYgKGkgPCBidWYubGVuZ3RoKSByZXR1cm4gciA/IHIgKyB0aGlzLnRleHQoYnVmLCBpKSA6IHRoaXMudGV4dChidWYsIGkpO1xuICByZXR1cm4gciB8fCAnJztcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IHV0ZjhFbmQ7XG5cbi8vIFJldHVybnMgb25seSBjb21wbGV0ZSBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS50ZXh0ID0gdXRmOFRleHQ7XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgcGFydGlhbCBub24tVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXJcblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmZpbGxMYXN0ID0gZnVuY3Rpb24gKGJ1Zikge1xuICBpZiAodGhpcy5sYXN0TmVlZCA8PSBidWYubGVuZ3RoKSB7XG4gICAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufTtcblxuLy8gQ2hlY2tzIHRoZSB0eXBlIG9mIGEgVVRGLTggYnl0ZSwgd2hldGhlciBpdCdzIEFTQ0lJLCBhIGxlYWRpbmcgYnl0ZSwgb3IgYVxuLy8gY29udGludWF0aW9uIGJ5dGUuIElmIGFuIGludmFsaWQgYnl0ZSBpcyBkZXRlY3RlZCwgLTIgaXMgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tCeXRlKGJ5dGUpIHtcbiAgaWYgKGJ5dGUgPD0gMHg3RikgcmV0dXJuIDA7ZWxzZSBpZiAoYnl0ZSA+PiA1ID09PSAweDA2KSByZXR1cm4gMjtlbHNlIGlmIChieXRlID4+IDQgPT09IDB4MEUpIHJldHVybiAzO2Vsc2UgaWYgKGJ5dGUgPj4gMyA9PT0gMHgxRSkgcmV0dXJuIDQ7XG4gIHJldHVybiBieXRlID4+IDYgPT09IDB4MDIgPyAtMSA6IC0yO1xufVxuXG4vLyBDaGVja3MgYXQgbW9zdCAzIGJ5dGVzIGF0IHRoZSBlbmQgb2YgYSBCdWZmZXIgaW4gb3JkZXIgdG8gZGV0ZWN0IGFuXG4vLyBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyLiBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzICgyLCAzLCBvciA0KVxuLy8gbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBVVEYtOCBjaGFyYWN0ZXIgKGlmIGFwcGxpY2FibGUpIGFyZSByZXR1cm5lZC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0luY29tcGxldGUoc2VsZiwgYnVmLCBpKSB7XG4gIHZhciBqID0gYnVmLmxlbmd0aCAtIDE7XG4gIGlmIChqIDwgaSkgcmV0dXJuIDA7XG4gIHZhciBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAxO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSBzZWxmLmxhc3ROZWVkID0gbmIgLSAyO1xuICAgIHJldHVybiBuYjtcbiAgfVxuICBpZiAoLS1qIDwgaSB8fCBuYiA9PT0gLTIpIHJldHVybiAwO1xuICBuYiA9IHV0ZjhDaGVja0J5dGUoYnVmW2pdKTtcbiAgaWYgKG5iID49IDApIHtcbiAgICBpZiAobmIgPiAwKSB7XG4gICAgICBpZiAobmIgPT09IDIpIG5iID0gMDtlbHNlIHNlbGYubGFzdE5lZWQgPSBuYiAtIDM7XG4gICAgfVxuICAgIHJldHVybiBuYjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy8gVmFsaWRhdGVzIGFzIG1hbnkgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIGFzXG4vLyBuZWVkZWQgb3IgYXJlIGF2YWlsYWJsZS4gSWYgd2Ugc2VlIGEgbm9uLWNvbnRpbnVhdGlvbiBieXRlIHdoZXJlIHdlIGV4cGVjdFxuLy8gb25lLCB3ZSBcInJlcGxhY2VcIiB0aGUgdmFsaWRhdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB3ZSd2ZSBzZWVuIHNvIGZhciB3aXRoXG4vLyBhIHNpbmdsZSBVVEYtOCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKCdcXHVmZmZkJyksIHRvIG1hdGNoIHY4J3MgVVRGLTggZGVjb2Rpbmdcbi8vIGJlaGF2aW9yLiBUaGUgY29udGludWF0aW9uIGJ5dGUgY2hlY2sgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMgaW4gdGhlIGNhc2Vcbi8vIHdoZXJlIGFsbCBvZiB0aGUgY29udGludWF0aW9uIGJ5dGVzIGZvciBhIGNoYXJhY3RlciBleGlzdCBpbiB0aGUgc2FtZSBidWZmZXIuXG4vLyBJdCBpcyBhbHNvIGRvbmUgdGhpcyB3YXkgYXMgYSBzbGlnaHQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaW5zdGVhZCBvZiB1c2luZyBhXG4vLyBsb29wLlxuZnVuY3Rpb24gdXRmOENoZWNrRXh0cmFCeXRlcyhzZWxmLCBidWYsIHApIHtcbiAgaWYgKChidWZbMF0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgIHNlbGYubGFzdE5lZWQgPSAwO1xuICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gIH1cbiAgaWYgKHNlbGYubGFzdE5lZWQgPiAxICYmIGJ1Zi5sZW5ndGggPiAxKSB7XG4gICAgaWYgKChidWZbMV0gJiAweEMwKSAhPT0gMHg4MCkge1xuICAgICAgc2VsZi5sYXN0TmVlZCA9IDE7XG4gICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgIH1cbiAgICBpZiAoc2VsZi5sYXN0TmVlZCA+IDIgJiYgYnVmLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgoYnVmWzJdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgICAgc2VsZi5sYXN0TmVlZCA9IDI7XG4gICAgICAgIHJldHVybiAnXFx1ZmZmZCc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEF0dGVtcHRzIHRvIGNvbXBsZXRlIGEgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXIgdXNpbmcgYnl0ZXMgZnJvbSBhIEJ1ZmZlci5cbmZ1bmN0aW9uIHV0ZjhGaWxsTGFzdChidWYpIHtcbiAgdmFyIHAgPSB0aGlzLmxhc3RUb3RhbCAtIHRoaXMubGFzdE5lZWQ7XG4gIHZhciByID0gdXRmOENoZWNrRXh0cmFCeXRlcyh0aGlzLCBidWYsIHApO1xuICBpZiAociAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcjtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHAsIDAsIHRoaXMubGFzdE5lZWQpO1xuICAgIHJldHVybiB0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIHRoaXMubGFzdFRvdGFsKTtcbiAgfVxuICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCBidWYubGVuZ3RoKTtcbiAgdGhpcy5sYXN0TmVlZCAtPSBidWYubGVuZ3RoO1xufVxuXG4vLyBSZXR1cm5zIGFsbCBjb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXJzIGluIGEgQnVmZmVyLiBJZiB0aGUgQnVmZmVyIGVuZGVkIG9uIGFcbi8vIHBhcnRpYWwgY2hhcmFjdGVyLCB0aGUgY2hhcmFjdGVyJ3MgYnl0ZXMgYXJlIGJ1ZmZlcmVkIHVudGlsIHRoZSByZXF1aXJlZFxuLy8gbnVtYmVyIG9mIGJ5dGVzIGFyZSBhdmFpbGFibGUuXG5mdW5jdGlvbiB1dGY4VGV4dChidWYsIGkpIHtcbiAgdmFyIHRvdGFsID0gdXRmOENoZWNrSW5jb21wbGV0ZSh0aGlzLCBidWYsIGkpO1xuICBpZiAoIXRoaXMubGFzdE5lZWQpIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpKTtcbiAgdGhpcy5sYXN0VG90YWwgPSB0b3RhbDtcbiAgdmFyIGVuZCA9IGJ1Zi5sZW5ndGggLSAodG90YWwgLSB0aGlzLmxhc3ROZWVkKTtcbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgMCwgZW5kKTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmOCcsIGksIGVuZCk7XG59XG5cbi8vIEZvciBVVEYtOCwgYSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgYWRkZWQgd2hlbiBlbmRpbmcgb24gYSBwYXJ0aWFsXG4vLyBjaGFyYWN0ZXIuXG5mdW5jdGlvbiB1dGY4RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArICdcXHVmZmZkJztcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFVURi0xNkxFIHR5cGljYWxseSBuZWVkcyB0d28gYnl0ZXMgcGVyIGNoYXJhY3RlciwgYnV0IGV2ZW4gaWYgd2UgaGF2ZSBhbiBldmVuXG4vLyBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGVuZCBvbiBhIGxlYWRpbmcvaGlnaFxuLy8gc3Vycm9nYXRlLiBJbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgdHdvIGJ5dGVzIGluIG9yZGVyIHRvXG4vLyBkZWNvZGUgdGhlIGxhc3QgY2hhcmFjdGVyIHByb3Blcmx5LlxuZnVuY3Rpb24gdXRmMTZUZXh0KGJ1ZiwgaSkge1xuICBpZiAoKGJ1Zi5sZW5ndGggLSBpKSAlIDIgPT09IDApIHtcbiAgICB2YXIgciA9IGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGkpO1xuICAgIGlmIChyKSB7XG4gICAgICB2YXIgYyA9IHIuY2hhckNvZGVBdChyLmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhEQkZGKSB7XG4gICAgICAgIHRoaXMubGFzdE5lZWQgPSAyO1xuICAgICAgICB0aGlzLmxhc3RUb3RhbCA9IDQ7XG4gICAgICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzFdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHIuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB0aGlzLmxhc3ROZWVkID0gMTtcbiAgdGhpcy5sYXN0VG90YWwgPSAyO1xuICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygndXRmMTZsZScsIGksIGJ1Zi5sZW5ndGggLSAxKTtcbn1cblxuLy8gRm9yIFVURi0xNkxFIHdlIGRvIG5vdCBleHBsaWNpdGx5IGFwcGVuZCBzcGVjaWFsIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgaWYgd2Vcbi8vIGVuZCBvbiBhIHBhcnRpYWwgY2hhcmFjdGVyLCB3ZSBzaW1wbHkgbGV0IHY4IGhhbmRsZSB0aGF0LlxuZnVuY3Rpb24gdXRmMTZFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHtcbiAgICB2YXIgZW5kID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICAgIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygndXRmMTZsZScsIDAsIGVuZCk7XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRleHQoYnVmLCBpKSB7XG4gIHZhciBuID0gKGJ1Zi5sZW5ndGggLSBpKSAlIDM7XG4gIGlmIChuID09PSAwKSByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnLCBpKTtcbiAgdGhpcy5sYXN0TmVlZCA9IDMgLSBuO1xuICB0aGlzLmxhc3RUb3RhbCA9IDM7XG4gIGlmIChuID09PSAxKSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMl07XG4gICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIH1cbiAgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSwgYnVmLmxlbmd0aCAtIG4pO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRFbmQoYnVmKSB7XG4gIHZhciByID0gYnVmICYmIGJ1Zi5sZW5ndGggPyB0aGlzLndyaXRlKGJ1ZikgOiAnJztcbiAgaWYgKHRoaXMubGFzdE5lZWQpIHJldHVybiByICsgdGhpcy5sYXN0Q2hhci50b1N0cmluZygnYmFzZTY0JywgMCwgMyAtIHRoaXMubGFzdE5lZWQpO1xuICByZXR1cm4gcjtcbn1cblxuLy8gUGFzcyBieXRlcyBvbiB0aHJvdWdoIGZvciBzaW5nbGUtYnl0ZSBlbmNvZGluZ3MgKGUuZy4gYXNjaWksIGxhdGluMSwgaGV4KVxuZnVuY3Rpb24gc2ltcGxlV3JpdGUoYnVmKSB7XG4gIHJldHVybiBidWYudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHNpbXBsZUVuZChidWYpIHtcbiAgcmV0dXJuIGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG59IiwiLyogZXNsaW50LWRpc2FibGUgbm9kZS9uby1kZXByZWNhdGVkLWFwaSAqL1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpXG52YXIgQnVmZmVyID0gYnVmZmVyLkJ1ZmZlclxuXG4vLyBhbHRlcm5hdGl2ZSB0byB1c2luZyBPYmplY3Qua2V5cyBmb3Igb2xkIGJyb3dzZXJzXG5mdW5jdGlvbiBjb3B5UHJvcHMgKHNyYywgZHN0KSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBkc3Rba2V5XSA9IHNyY1trZXldXG4gIH1cbn1cbmlmIChCdWZmZXIuZnJvbSAmJiBCdWZmZXIuYWxsb2MgJiYgQnVmZmVyLmFsbG9jVW5zYWZlICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBidWZmZXJcbn0gZWxzZSB7XG4gIC8vIENvcHkgcHJvcGVydGllcyBmcm9tIHJlcXVpcmUoJ2J1ZmZlcicpXG4gIGNvcHlQcm9wcyhidWZmZXIsIGV4cG9ydHMpXG4gIGV4cG9ydHMuQnVmZmVyID0gU2FmZUJ1ZmZlclxufVxuXG5mdW5jdGlvbiBTYWZlQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBDb3B5IHN0YXRpYyBtZXRob2RzIGZyb20gQnVmZmVyXG5jb3B5UHJvcHMoQnVmZmVyLCBTYWZlQnVmZmVyKVxuXG5TYWZlQnVmZmVyLmZyb20gPSBmdW5jdGlvbiAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cblNhZmVCdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmLmZpbGwoMClcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cblNhZmVCdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlcihzaXplKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gYnVmZmVyLlNsb3dCdWZmZXIoc2l6ZSlcbn1cbiIsIlxuZXhwb3J0cy5ldmVyeSA9IGZ1bmN0aW9uKHN0cikge1xuICByZXR1cm4gbmV3IEV2ZXJ5KHN0cik7XG59O1xuXG4vKlxuICBUaW1lIG1hcFxuKi9cblxudmFyIHRpbWUgPSB7XG4gIG1pbGxpc2Vjb25kOiAxLFxuICBzZWNvbmQ6IDEwMDAsXG4gIG1pbnV0ZTogNjAwMDAsXG4gIGhvdXI6IDM2MDAwMDAsXG4gIGRheTogODY0MDAwMDBcbn07XG5cbmZvciAodmFyIGtleSBpbiB0aW1lKSB7XG4gIGlmIChrZXkgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICB0aW1lLm1zID0gdGltZVtrZXldO1xuICB9IGVsc2Uge1xuICAgIHRpbWVba2V5LmNoYXJBdCgwKV0gPSB0aW1lW2tleV07XG4gIH1cbiAgdGltZVtrZXkgKyAncyddID0gdGltZVtrZXldO1xufVxuXG5cbi8qXG4gIEV2ZXJ5IGNvbnN0cnVjdG9yXG4qL1xuXG5mdW5jdGlvbiBFdmVyeShzdHIpIHtcbiAgdGhpcy5jb3VudCA9IDA7XG4gIHZhciBtID0gcGFyc2Uoc3RyKTtcbiAgaWYgKG0pIHtcbiAgICB0aGlzLnRpbWUgPSBOdW1iZXIobVswXSkgKiB0aW1lW21bMV1dO1xuICAgIHRoaXMudHlwZSA9IG1bMV07XG4gIH1cbn1cblxuRXZlcnkucHJvdG90eXBlLmRvID0gZnVuY3Rpb24oY2IpIHtcbiAgaWYgKHRoaXMudGltZSkge1xuICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChjYWxsYmFjaywgdGhpcy50aW1lKTtcbiAgfVxuXG4gIHZhciB0aGF0ID0gdGhpcztcbiAgZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgdGhhdC5jb3VudCsrO1xuICAgIGNiLmNhbGwodGhhdCk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVyeS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5pbnRlcnZhbCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgZGVsZXRlIHRoaXMuaW50ZXJ2YWw7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5cbi8qXG4gIENvbnZlcnQgc3RyaW5nIHRvIG1pbGxpc2Vjb25kc1xuXG4gICAgbXMsIG1pbGxpc2Vjb25kKHMpP1xuICAgIHMsIHNlY29uZChzKT9cbiAgICBtLCBtaW51dGUocyk/XG4gICAgaCwgaG91cihzKT9cbiAgICBkLCBkYXkocyk/XG4qL1xudmFyIHJlZyA9IC9eXFxzKihcXGQrKD86XFwuXFxkKyk/KVxccyooW2Etel0rKVxccyokLztcblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHZhciBtID0gc3RyLm1hdGNoKHJlZyk7XG4gIGlmIChtICYmIHRpbWVbbVsyXV0pIHtcbiAgICByZXR1cm4gbS5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICBleHBvcnRzLnN0cmlwQk9NID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKHN0clswXSA9PT0gJ1xcdUZFRkYnKSB7XG4gICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICBcInVzZSBzdHJpY3RcIjtcbiAgdmFyIGJ1aWxkZXIsIGRlZmF1bHRzLCBlc2NhcGVDREFUQSwgcmVxdWlyZXNDREFUQSwgd3JhcENEQVRBLFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBidWlsZGVyID0gcmVxdWlyZSgneG1sYnVpbGRlcicpO1xuXG4gIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpLmRlZmF1bHRzO1xuXG4gIHJlcXVpcmVzQ0RBVEEgPSBmdW5jdGlvbihlbnRyeSkge1xuICAgIHJldHVybiB0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIgJiYgKGVudHJ5LmluZGV4T2YoJyYnKSA+PSAwIHx8IGVudHJ5LmluZGV4T2YoJz4nKSA+PSAwIHx8IGVudHJ5LmluZGV4T2YoJzwnKSA+PSAwKTtcbiAgfTtcblxuICB3cmFwQ0RBVEEgPSBmdW5jdGlvbihlbnRyeSkge1xuICAgIHJldHVybiBcIjwhW0NEQVRBW1wiICsgKGVzY2FwZUNEQVRBKGVudHJ5KSkgKyBcIl1dPlwiO1xuICB9O1xuXG4gIGVzY2FwZUNEQVRBID0gZnVuY3Rpb24oZW50cnkpIHtcbiAgICByZXR1cm4gZW50cnkucmVwbGFjZSgnXV0+JywgJ11dXV0+PCFbQ0RBVEFbPicpO1xuICB9O1xuXG4gIGV4cG9ydHMuQnVpbGRlciA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBCdWlsZGVyKG9wdHMpIHtcbiAgICAgIHZhciBrZXksIHJlZiwgdmFsdWU7XG4gICAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICAgIHJlZiA9IGRlZmF1bHRzW1wiMC4yXCJdO1xuICAgICAgZm9yIChrZXkgaW4gcmVmKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZiwga2V5KSkgY29udGludWU7XG4gICAgICAgIHZhbHVlID0gcmVmW2tleV07XG4gICAgICAgIHRoaXMub3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBmb3IgKGtleSBpbiBvcHRzKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG9wdHMsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICB2YWx1ZSA9IG9wdHNba2V5XTtcbiAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBCdWlsZGVyLnByb3RvdHlwZS5idWlsZE9iamVjdCA9IGZ1bmN0aW9uKHJvb3RPYmopIHtcbiAgICAgIHZhciBhdHRya2V5LCBjaGFya2V5LCByZW5kZXIsIHJvb3RFbGVtZW50LCByb290TmFtZTtcbiAgICAgIGF0dHJrZXkgPSB0aGlzLm9wdGlvbnMuYXR0cmtleTtcbiAgICAgIGNoYXJrZXkgPSB0aGlzLm9wdGlvbnMuY2hhcmtleTtcbiAgICAgIGlmICgoT2JqZWN0LmtleXMocm9vdE9iaikubGVuZ3RoID09PSAxKSAmJiAodGhpcy5vcHRpb25zLnJvb3ROYW1lID09PSBkZWZhdWx0c1snMC4yJ10ucm9vdE5hbWUpKSB7XG4gICAgICAgIHJvb3ROYW1lID0gT2JqZWN0LmtleXMocm9vdE9iailbMF07XG4gICAgICAgIHJvb3RPYmogPSByb290T2JqW3Jvb3ROYW1lXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3ROYW1lID0gdGhpcy5vcHRpb25zLnJvb3ROYW1lO1xuICAgICAgfVxuICAgICAgcmVuZGVyID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50LCBvYmopIHtcbiAgICAgICAgICB2YXIgYXR0ciwgY2hpbGQsIGVudHJ5LCBpbmRleCwga2V5LCB2YWx1ZTtcbiAgICAgICAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmNkYXRhICYmIHJlcXVpcmVzQ0RBVEEob2JqKSkge1xuICAgICAgICAgICAgICBlbGVtZW50LnJhdyh3cmFwQ0RBVEEob2JqKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbGVtZW50LnR4dChvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICBmb3IgKGluZGV4IGluIG9iaikge1xuICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChvYmosIGluZGV4KSkgY29udGludWU7XG4gICAgICAgICAgICAgIGNoaWxkID0gb2JqW2luZGV4XTtcbiAgICAgICAgICAgICAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGNoaWxkW2tleV07XG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IHJlbmRlcihlbGVtZW50LmVsZShrZXkpLCBlbnRyeSkudXAoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwob2JqLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2hpbGQgPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgaWYgKGtleSA9PT0gYXR0cmtleSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoYXR0ciBpbiBjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNoaWxkW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5hdHQoYXR0ciwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IGNoYXJrZXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5jZGF0YSAmJiByZXF1aXJlc0NEQVRBKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucmF3KHdyYXBDREFUQShjaGlsZCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC50eHQoY2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIGZvciAoaW5kZXggaW4gY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKGNoaWxkLCBpbmRleCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgZW50cnkgPSBjaGlsZFtpbmRleF07XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5jZGF0YSAmJiByZXF1aXJlc0NEQVRBKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LmVsZShrZXkpLnJhdyh3cmFwQ0RBVEEoZW50cnkpKS51cCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LmVsZShrZXksIGVudHJ5KS51cCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gcmVuZGVyKGVsZW1lbnQuZWxlKGtleSksIGVudHJ5KS51cCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY2hpbGQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gcmVuZGVyKGVsZW1lbnQuZWxlKGtleSksIGNoaWxkKS51cCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnICYmIF90aGlzLm9wdGlvbnMuY2RhdGEgJiYgcmVxdWlyZXNDREFUQShjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LmVsZShrZXkpLnJhdyh3cmFwQ0RBVEEoY2hpbGQpKS51cCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlKGtleSwgY2hpbGQudG9TdHJpbmcoKSkudXAoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHJvb3RFbGVtZW50ID0gYnVpbGRlci5jcmVhdGUocm9vdE5hbWUsIHRoaXMub3B0aW9ucy54bWxkZWMsIHRoaXMub3B0aW9ucy5kb2N0eXBlLCB7XG4gICAgICAgIGhlYWRsZXNzOiB0aGlzLm9wdGlvbnMuaGVhZGxlc3MsXG4gICAgICAgIGFsbG93U3Vycm9nYXRlQ2hhcnM6IHRoaXMub3B0aW9ucy5hbGxvd1N1cnJvZ2F0ZUNoYXJzXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZW5kZXIocm9vdEVsZW1lbnQsIHJvb3RPYmopLmVuZCh0aGlzLm9wdGlvbnMucmVuZGVyT3B0cyk7XG4gICAgfTtcblxuICAgIHJldHVybiBCdWlsZGVyO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICBleHBvcnRzLmRlZmF1bHRzID0ge1xuICAgIFwiMC4xXCI6IHtcbiAgICAgIGV4cGxpY2l0Q2hhcmtleTogZmFsc2UsXG4gICAgICB0cmltOiB0cnVlLFxuICAgICAgbm9ybWFsaXplOiB0cnVlLFxuICAgICAgbm9ybWFsaXplVGFnczogZmFsc2UsXG4gICAgICBhdHRya2V5OiBcIkBcIixcbiAgICAgIGNoYXJrZXk6IFwiI1wiLFxuICAgICAgZXhwbGljaXRBcnJheTogZmFsc2UsXG4gICAgICBpZ25vcmVBdHRyczogZmFsc2UsXG4gICAgICBtZXJnZUF0dHJzOiBmYWxzZSxcbiAgICAgIGV4cGxpY2l0Um9vdDogZmFsc2UsXG4gICAgICB2YWxpZGF0b3I6IG51bGwsXG4gICAgICB4bWxuczogZmFsc2UsXG4gICAgICBleHBsaWNpdENoaWxkcmVuOiBmYWxzZSxcbiAgICAgIGNoaWxka2V5OiAnQEAnLFxuICAgICAgY2hhcnNBc0NoaWxkcmVuOiBmYWxzZSxcbiAgICAgIGluY2x1ZGVXaGl0ZUNoYXJzOiBmYWxzZSxcbiAgICAgIGFzeW5jOiBmYWxzZSxcbiAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgIGF0dHJOYW1lUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIGF0dHJWYWx1ZVByb2Nlc3NvcnM6IG51bGwsXG4gICAgICB0YWdOYW1lUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIHZhbHVlUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIGVtcHR5VGFnOiAnJ1xuICAgIH0sXG4gICAgXCIwLjJcIjoge1xuICAgICAgZXhwbGljaXRDaGFya2V5OiBmYWxzZSxcbiAgICAgIHRyaW06IGZhbHNlLFxuICAgICAgbm9ybWFsaXplOiBmYWxzZSxcbiAgICAgIG5vcm1hbGl6ZVRhZ3M6IGZhbHNlLFxuICAgICAgYXR0cmtleTogXCIkXCIsXG4gICAgICBjaGFya2V5OiBcIl9cIixcbiAgICAgIGV4cGxpY2l0QXJyYXk6IHRydWUsXG4gICAgICBpZ25vcmVBdHRyczogZmFsc2UsXG4gICAgICBtZXJnZUF0dHJzOiBmYWxzZSxcbiAgICAgIGV4cGxpY2l0Um9vdDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRvcjogbnVsbCxcbiAgICAgIHhtbG5zOiBmYWxzZSxcbiAgICAgIGV4cGxpY2l0Q2hpbGRyZW46IGZhbHNlLFxuICAgICAgcHJlc2VydmVDaGlsZHJlbk9yZGVyOiBmYWxzZSxcbiAgICAgIGNoaWxka2V5OiAnJCQnLFxuICAgICAgY2hhcnNBc0NoaWxkcmVuOiBmYWxzZSxcbiAgICAgIGluY2x1ZGVXaGl0ZUNoYXJzOiBmYWxzZSxcbiAgICAgIGFzeW5jOiBmYWxzZSxcbiAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgIGF0dHJOYW1lUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIGF0dHJWYWx1ZVByb2Nlc3NvcnM6IG51bGwsXG4gICAgICB0YWdOYW1lUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIHZhbHVlUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIHJvb3ROYW1lOiAncm9vdCcsXG4gICAgICB4bWxkZWM6IHtcbiAgICAgICAgJ3ZlcnNpb24nOiAnMS4wJyxcbiAgICAgICAgJ2VuY29kaW5nJzogJ1VURi04JyxcbiAgICAgICAgJ3N0YW5kYWxvbmUnOiB0cnVlXG4gICAgICB9LFxuICAgICAgZG9jdHlwZTogbnVsbCxcbiAgICAgIHJlbmRlck9wdHM6IHtcbiAgICAgICAgJ3ByZXR0eSc6IHRydWUsXG4gICAgICAgICdpbmRlbnQnOiAnICAnLFxuICAgICAgICAnbmV3bGluZSc6ICdcXG4nXG4gICAgICB9LFxuICAgICAgaGVhZGxlc3M6IGZhbHNlLFxuICAgICAgY2h1bmtTaXplOiAxMDAwMCxcbiAgICAgIGVtcHR5VGFnOiAnJyxcbiAgICAgIGNkYXRhOiBmYWxzZVxuICAgIH1cbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICB2YXIgYm9tLCBkZWZhdWx0cywgZXZlbnRzLCBpc0VtcHR5LCBwcm9jZXNzSXRlbSwgcHJvY2Vzc29ycywgc2F4LCBzZXRJbW1lZGlhdGUsXG4gICAgYmluZCA9IGZ1bmN0aW9uKGZuLCBtZSl7IHJldHVybiBmdW5jdGlvbigpeyByZXR1cm4gZm4uYXBwbHkobWUsIGFyZ3VtZW50cyk7IH07IH0sXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBzYXggPSByZXF1aXJlKCdzYXgnKTtcblxuICBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcblxuICBib20gPSByZXF1aXJlKCcuL2JvbScpO1xuXG4gIHByb2Nlc3NvcnMgPSByZXF1aXJlKCcuL3Byb2Nlc3NvcnMnKTtcblxuICBzZXRJbW1lZGlhdGUgPSByZXF1aXJlKCd0aW1lcnMnKS5zZXRJbW1lZGlhdGU7XG5cbiAgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJykuZGVmYXVsdHM7XG5cbiAgaXNFbXB0eSA9IGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gXCJvYmplY3RcIiAmJiAodGhpbmcgIT0gbnVsbCkgJiYgT2JqZWN0LmtleXModGhpbmcpLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICBwcm9jZXNzSXRlbSA9IGZ1bmN0aW9uKHByb2Nlc3NvcnMsIGl0ZW0sIGtleSkge1xuICAgIHZhciBpLCBsZW4sIHByb2Nlc3M7XG4gICAgZm9yIChpID0gMCwgbGVuID0gcHJvY2Vzc29ycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgcHJvY2VzcyA9IHByb2Nlc3NvcnNbaV07XG4gICAgICBpdGVtID0gcHJvY2VzcyhpdGVtLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcblxuICBleHBvcnRzLlBhcnNlciA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFBhcnNlciwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBQYXJzZXIob3B0cykge1xuICAgICAgdGhpcy5wYXJzZVN0cmluZ1Byb21pc2UgPSBiaW5kKHRoaXMucGFyc2VTdHJpbmdQcm9taXNlLCB0aGlzKTtcbiAgICAgIHRoaXMucGFyc2VTdHJpbmcgPSBiaW5kKHRoaXMucGFyc2VTdHJpbmcsIHRoaXMpO1xuICAgICAgdGhpcy5yZXNldCA9IGJpbmQodGhpcy5yZXNldCwgdGhpcyk7XG4gICAgICB0aGlzLmFzc2lnbk9yUHVzaCA9IGJpbmQodGhpcy5hc3NpZ25PclB1c2gsIHRoaXMpO1xuICAgICAgdGhpcy5wcm9jZXNzQXN5bmMgPSBiaW5kKHRoaXMucHJvY2Vzc0FzeW5jLCB0aGlzKTtcbiAgICAgIHZhciBrZXksIHJlZiwgdmFsdWU7XG4gICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgZXhwb3J0cy5QYXJzZXIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgZXhwb3J0cy5QYXJzZXIob3B0cyk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICAgIHJlZiA9IGRlZmF1bHRzW1wiMC4yXCJdO1xuICAgICAgZm9yIChrZXkgaW4gcmVmKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZiwga2V5KSkgY29udGludWU7XG4gICAgICAgIHZhbHVlID0gcmVmW2tleV07XG4gICAgICAgIHRoaXMub3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBmb3IgKGtleSBpbiBvcHRzKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG9wdHMsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICB2YWx1ZSA9IG9wdHNba2V5XTtcbiAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMueG1sbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnhtbG5za2V5ID0gdGhpcy5vcHRpb25zLmF0dHJrZXkgKyBcIm5zXCI7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vcm1hbGl6ZVRhZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudGFnTmFtZVByb2Nlc3NvcnMpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudGFnTmFtZVByb2Nlc3NvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMudGFnTmFtZVByb2Nlc3NvcnMudW5zaGlmdChwcm9jZXNzb3JzLm5vcm1hbGl6ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5wcm9jZXNzQXN5bmMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjaHVuaywgZXJyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMucmVtYWluaW5nLmxlbmd0aCA8PSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplKSB7XG4gICAgICAgICAgY2h1bmsgPSB0aGlzLnJlbWFpbmluZztcbiAgICAgICAgICB0aGlzLnJlbWFpbmluZyA9ICcnO1xuICAgICAgICAgIHRoaXMuc2F4UGFyc2VyID0gdGhpcy5zYXhQYXJzZXIud3JpdGUoY2h1bmspO1xuICAgICAgICAgIHJldHVybiB0aGlzLnNheFBhcnNlci5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rID0gdGhpcy5yZW1haW5pbmcuc3Vic3RyKDAsIHRoaXMub3B0aW9ucy5jaHVua1NpemUpO1xuICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gdGhpcy5yZW1haW5pbmcuc3Vic3RyKHRoaXMub3B0aW9ucy5jaHVua1NpemUsIHRoaXMucmVtYWluaW5nLmxlbmd0aCk7XG4gICAgICAgICAgdGhpcy5zYXhQYXJzZXIgPSB0aGlzLnNheFBhcnNlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgcmV0dXJuIHNldEltbWVkaWF0ZSh0aGlzLnByb2Nlc3NBc3luYyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgICAgICBlcnIgPSBlcnJvcjE7XG4gICAgICAgIGlmICghdGhpcy5zYXhQYXJzZXIuZXJyVGhyb3duKSB7XG4gICAgICAgICAgdGhpcy5zYXhQYXJzZXIuZXJyVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5lbWl0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5hc3NpZ25PclB1c2ggPSBmdW5jdGlvbihvYmosIGtleSwgbmV3VmFsdWUpIHtcbiAgICAgIGlmICghKGtleSBpbiBvYmopKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmV4cGxpY2l0QXJyYXkpIHtcbiAgICAgICAgICByZXR1cm4gb2JqW2tleV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2JqW2tleV0gPSBbbmV3VmFsdWVdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIShvYmpba2V5XSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICAgIG9ialtrZXldID0gW29ialtrZXldXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqW2tleV0ucHVzaChuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhdHRya2V5LCBjaGFya2V5LCBvbnRleHQsIHN0YWNrO1xuICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgIHRoaXMuc2F4UGFyc2VyID0gc2F4LnBhcnNlcih0aGlzLm9wdGlvbnMuc3RyaWN0LCB7XG4gICAgICAgIHRyaW06IGZhbHNlLFxuICAgICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgICB4bWxuczogdGhpcy5vcHRpb25zLnhtbG5zXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2F4UGFyc2VyLmVyclRocm93biA9IGZhbHNlO1xuICAgICAgdGhpcy5zYXhQYXJzZXIub25lcnJvciA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICBfdGhpcy5zYXhQYXJzZXIucmVzdW1lKCk7XG4gICAgICAgICAgaWYgKCFfdGhpcy5zYXhQYXJzZXIuZXJyVGhyb3duKSB7XG4gICAgICAgICAgICBfdGhpcy5zYXhQYXJzZXIuZXJyVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgdGhpcy5zYXhQYXJzZXIub25lbmQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghX3RoaXMuc2F4UGFyc2VyLmVuZGVkKSB7XG4gICAgICAgICAgICBfdGhpcy5zYXhQYXJzZXIuZW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJlbmRcIiwgX3RoaXMucmVzdWx0T2JqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHRoaXMuc2F4UGFyc2VyLmVuZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLkVYUExJQ0lUX0NIQVJLRVkgPSB0aGlzLm9wdGlvbnMuZXhwbGljaXRDaGFya2V5O1xuICAgICAgdGhpcy5yZXN1bHRPYmplY3QgPSBudWxsO1xuICAgICAgc3RhY2sgPSBbXTtcbiAgICAgIGF0dHJrZXkgPSB0aGlzLm9wdGlvbnMuYXR0cmtleTtcbiAgICAgIGNoYXJrZXkgPSB0aGlzLm9wdGlvbnMuY2hhcmtleTtcbiAgICAgIHRoaXMuc2F4UGFyc2VyLm9ub3BlbnRhZyA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgICAgICAgIHZhciBrZXksIG5ld1ZhbHVlLCBvYmosIHByb2Nlc3NlZEtleSwgcmVmO1xuICAgICAgICAgIG9iaiA9IHt9O1xuICAgICAgICAgIG9ialtjaGFya2V5XSA9IFwiXCI7XG4gICAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLmlnbm9yZUF0dHJzKSB7XG4gICAgICAgICAgICByZWYgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICBmb3IgKGtleSBpbiByZWYpIHtcbiAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgaWYgKCEoYXR0cmtleSBpbiBvYmopICYmICFfdGhpcy5vcHRpb25zLm1lcmdlQXR0cnMpIHtcbiAgICAgICAgICAgICAgICBvYmpbYXR0cmtleV0gPSB7fTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuZXdWYWx1ZSA9IF90aGlzLm9wdGlvbnMuYXR0clZhbHVlUHJvY2Vzc29ycyA/IHByb2Nlc3NJdGVtKF90aGlzLm9wdGlvbnMuYXR0clZhbHVlUHJvY2Vzc29ycywgbm9kZS5hdHRyaWJ1dGVzW2tleV0sIGtleSkgOiBub2RlLmF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkS2V5ID0gX3RoaXMub3B0aW9ucy5hdHRyTmFtZVByb2Nlc3NvcnMgPyBwcm9jZXNzSXRlbShfdGhpcy5vcHRpb25zLmF0dHJOYW1lUHJvY2Vzc29ycywga2V5KSA6IGtleTtcbiAgICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMubWVyZ2VBdHRycykge1xuICAgICAgICAgICAgICAgIF90aGlzLmFzc2lnbk9yUHVzaChvYmosIHByb2Nlc3NlZEtleSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ialthdHRya2V5XVtwcm9jZXNzZWRLZXldID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW1wiI25hbWVcIl0gPSBfdGhpcy5vcHRpb25zLnRhZ05hbWVQcm9jZXNzb3JzID8gcHJvY2Vzc0l0ZW0oX3RoaXMub3B0aW9ucy50YWdOYW1lUHJvY2Vzc29ycywgbm9kZS5uYW1lKSA6IG5vZGUubmFtZTtcbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy54bWxucykge1xuICAgICAgICAgICAgb2JqW190aGlzLm9wdGlvbnMueG1sbnNrZXldID0ge1xuICAgICAgICAgICAgICB1cmk6IG5vZGUudXJpLFxuICAgICAgICAgICAgICBsb2NhbDogbm9kZS5sb2NhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0YWNrLnB1c2gob2JqKTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgdGhpcy5zYXhQYXJzZXIub25jbG9zZXRhZyA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGNkYXRhLCBlbXB0eVN0ciwga2V5LCBub2RlLCBub2RlTmFtZSwgb2JqLCBvYmpDbG9uZSwgb2xkLCBzLCB4cGF0aDtcbiAgICAgICAgICBvYmogPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBub2RlTmFtZSA9IG9ialtcIiNuYW1lXCJdO1xuICAgICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5leHBsaWNpdENoaWxkcmVuIHx8ICFfdGhpcy5vcHRpb25zLnByZXNlcnZlQ2hpbGRyZW5PcmRlcikge1xuICAgICAgICAgICAgZGVsZXRlIG9ialtcIiNuYW1lXCJdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2JqLmNkYXRhID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjZGF0YSA9IG9iai5jZGF0YTtcbiAgICAgICAgICAgIGRlbGV0ZSBvYmouY2RhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAob2JqW2NoYXJrZXldLm1hdGNoKC9eXFxzKiQvKSAmJiAhY2RhdGEpIHtcbiAgICAgICAgICAgIGVtcHR5U3RyID0gb2JqW2NoYXJrZXldO1xuICAgICAgICAgICAgZGVsZXRlIG9ialtjaGFya2V5XTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMudHJpbSkge1xuICAgICAgICAgICAgICBvYmpbY2hhcmtleV0gPSBvYmpbY2hhcmtleV0udHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgIG9ialtjaGFya2V5XSA9IG9ialtjaGFya2V5XS5yZXBsYWNlKC9cXHN7Mix9L2csIFwiIFwiKS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmpbY2hhcmtleV0gPSBfdGhpcy5vcHRpb25zLnZhbHVlUHJvY2Vzc29ycyA/IHByb2Nlc3NJdGVtKF90aGlzLm9wdGlvbnMudmFsdWVQcm9jZXNzb3JzLCBvYmpbY2hhcmtleV0sIG5vZGVOYW1lKSA6IG9ialtjaGFya2V5XTtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMSAmJiBjaGFya2V5IGluIG9iaiAmJiAhX3RoaXMuRVhQTElDSVRfQ0hBUktFWSkge1xuICAgICAgICAgICAgICBvYmogPSBvYmpbY2hhcmtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgIG9iaiA9IF90aGlzLm9wdGlvbnMuZW1wdHlUYWcgIT09ICcnID8gX3RoaXMub3B0aW9ucy5lbXB0eVRhZyA6IGVtcHR5U3RyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy52YWxpZGF0b3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgeHBhdGggPSBcIi9cIiArICgoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBpLCBsZW4sIHJlc3VsdHM7XG4gICAgICAgICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gc3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBub2RlID0gc3RhY2tbaV07XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGVbXCIjbmFtZVwiXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9KSgpKS5jb25jYXQobm9kZU5hbWUpLmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgZXJyO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogPSBfdGhpcy5vcHRpb25zLnZhbGlkYXRvcih4cGF0aCwgcyAmJiBzW25vZGVOYW1lXSwgb2JqKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgICAgICAgICAgICAgZXJyID0gZXJyb3IxO1xuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuZXhwbGljaXRDaGlsZHJlbiAmJiAhX3RoaXMub3B0aW9ucy5tZXJnZUF0dHJzICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMucHJlc2VydmVDaGlsZHJlbk9yZGVyKSB7XG4gICAgICAgICAgICAgIG5vZGUgPSB7fTtcbiAgICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuYXR0cmtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBub2RlW190aGlzLm9wdGlvbnMuYXR0cmtleV0gPSBvYmpbX3RoaXMub3B0aW9ucy5hdHRya2V5XTtcbiAgICAgICAgICAgICAgICBkZWxldGUgb2JqW190aGlzLm9wdGlvbnMuYXR0cmtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLmNoYXJzQXNDaGlsZHJlbiAmJiBfdGhpcy5vcHRpb25zLmNoYXJrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgbm9kZVtfdGhpcy5vcHRpb25zLmNoYXJrZXldID0gb2JqW190aGlzLm9wdGlvbnMuY2hhcmtleV07XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9ialtfdGhpcy5vcHRpb25zLmNoYXJrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBub2RlW190aGlzLm9wdGlvbnMuY2hpbGRrZXldID0gb2JqO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9iaiA9IG5vZGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMpIHtcbiAgICAgICAgICAgICAgc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XSA9IHNbX3RoaXMub3B0aW9ucy5jaGlsZGtleV0gfHwgW107XG4gICAgICAgICAgICAgIG9iakNsb25lID0ge307XG4gICAgICAgICAgICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG9iaiwga2V5KSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgb2JqQ2xvbmVba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNbX3RoaXMub3B0aW9ucy5jaGlsZGtleV0ucHVzaChvYmpDbG9uZSk7XG4gICAgICAgICAgICAgIGRlbGV0ZSBvYmpbXCIjbmFtZVwiXTtcbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAxICYmIGNoYXJrZXkgaW4gb2JqICYmICFfdGhpcy5FWFBMSUNJVF9DSEFSS0VZKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW2NoYXJrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuYXNzaWduT3JQdXNoKHMsIG5vZGVOYW1lLCBvYmopO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5leHBsaWNpdFJvb3QpIHtcbiAgICAgICAgICAgICAgb2xkID0gb2JqO1xuICAgICAgICAgICAgICBvYmogPSB7fTtcbiAgICAgICAgICAgICAgb2JqW25vZGVOYW1lXSA9IG9sZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzLnJlc3VsdE9iamVjdCA9IG9iajtcbiAgICAgICAgICAgIF90aGlzLnNheFBhcnNlci5lbmRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdChcImVuZFwiLCBfdGhpcy5yZXN1bHRPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgb250ZXh0ID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgICAgdmFyIGNoYXJDaGlsZCwgcztcbiAgICAgICAgICBzID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgIHNbY2hhcmtleV0gKz0gdGV4dDtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmV4cGxpY2l0Q2hpbGRyZW4gJiYgX3RoaXMub3B0aW9ucy5wcmVzZXJ2ZUNoaWxkcmVuT3JkZXIgJiYgX3RoaXMub3B0aW9ucy5jaGFyc0FzQ2hpbGRyZW4gJiYgKF90aGlzLm9wdGlvbnMuaW5jbHVkZVdoaXRlQ2hhcnMgfHwgdGV4dC5yZXBsYWNlKC9cXFxcbi9nLCAnJykudHJpbSgpICE9PSAnJykpIHtcbiAgICAgICAgICAgICAgc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XSA9IHNbX3RoaXMub3B0aW9ucy5jaGlsZGtleV0gfHwgW107XG4gICAgICAgICAgICAgIGNoYXJDaGlsZCA9IHtcbiAgICAgICAgICAgICAgICAnI25hbWUnOiAnX190ZXh0X18nXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGNoYXJDaGlsZFtjaGFya2V5XSA9IHRleHQ7XG4gICAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLm5vcm1hbGl6ZSkge1xuICAgICAgICAgICAgICAgIGNoYXJDaGlsZFtjaGFya2V5XSA9IGNoYXJDaGlsZFtjaGFya2V5XS5yZXBsYWNlKC9cXHN7Mix9L2csIFwiIFwiKS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XS5wdXNoKGNoYXJDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKTtcbiAgICAgIHRoaXMuc2F4UGFyc2VyLm9udGV4dCA9IG9udGV4dDtcbiAgICAgIHJldHVybiB0aGlzLnNheFBhcnNlci5vbmNkYXRhID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgICAgdmFyIHM7XG4gICAgICAgICAgcyA9IG9udGV4dCh0ZXh0KTtcbiAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgcmV0dXJuIHMuY2RhdGEgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnBhcnNlU3RyaW5nID0gZnVuY3Rpb24oc3RyLCBjYikge1xuICAgICAgdmFyIGVycjtcbiAgICAgIGlmICgoY2IgIT0gbnVsbCkgJiYgdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5vbihcImVuZFwiLCBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHN0ciA9IHN0ci50b1N0cmluZygpO1xuICAgICAgICBpZiAoc3RyLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICB0aGlzLmVtaXQoXCJlbmRcIiwgbnVsbCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RyID0gYm9tLnN0cmlwQk9NKHN0cik7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXN5bmMpIHtcbiAgICAgICAgICB0aGlzLnJlbWFpbmluZyA9IHN0cjtcbiAgICAgICAgICBzZXRJbW1lZGlhdGUodGhpcy5wcm9jZXNzQXN5bmMpO1xuICAgICAgICAgIHJldHVybiB0aGlzLnNheFBhcnNlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zYXhQYXJzZXIud3JpdGUoc3RyKS5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgICAgIGVyciA9IGVycm9yMTtcbiAgICAgICAgaWYgKCEodGhpcy5zYXhQYXJzZXIuZXJyVGhyb3duIHx8IHRoaXMuc2F4UGFyc2VyLmVuZGVkKSkge1xuICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHJldHVybiB0aGlzLnNheFBhcnNlci5lcnJUaHJvd24gPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2F4UGFyc2VyLmVuZGVkKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTdHJpbmdQcm9taXNlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMucGFyc2VTdHJpbmcoc3RyLCBmdW5jdGlvbihlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFBhcnNlcjtcblxuICB9KShldmVudHMpO1xuXG4gIGV4cG9ydHMucGFyc2VTdHJpbmcgPSBmdW5jdGlvbihzdHIsIGEsIGIpIHtcbiAgICB2YXIgY2IsIG9wdGlvbnMsIHBhcnNlcjtcbiAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBiO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvcHRpb25zID0gYTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gYTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgcGFyc2VyID0gbmV3IGV4cG9ydHMuUGFyc2VyKG9wdGlvbnMpO1xuICAgIHJldHVybiBwYXJzZXIucGFyc2VTdHJpbmcoc3RyLCBjYik7XG4gIH07XG5cbiAgZXhwb3J0cy5wYXJzZVN0cmluZ1Byb21pc2UgPSBmdW5jdGlvbihzdHIsIGEpIHtcbiAgICB2YXIgb3B0aW9ucywgcGFyc2VyO1xuICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG9wdGlvbnMgPSBhO1xuICAgIH1cbiAgICBwYXJzZXIgPSBuZXcgZXhwb3J0cy5QYXJzZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZVN0cmluZ1Byb21pc2Uoc3RyKTtcbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICB2YXIgcHJlZml4TWF0Y2g7XG5cbiAgcHJlZml4TWF0Y2ggPSBuZXcgUmVnRXhwKC8oPyF4bWxucyleLio6Lyk7XG5cbiAgZXhwb3J0cy5ub3JtYWxpemUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG4gIH07XG5cbiAgZXhwb3J0cy5maXJzdENoYXJMb3dlckNhc2UgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuICB9O1xuXG4gIGV4cG9ydHMuc3RyaXBQcmVmaXggPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UocHJlZml4TWF0Y2gsICcnKTtcbiAgfTtcblxuICBleHBvcnRzLnBhcnNlTnVtYmVycyA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICghaXNOYU4oc3RyKSkge1xuICAgICAgc3RyID0gc3RyICUgMSA9PT0gMCA/IHBhcnNlSW50KHN0ciwgMTApIDogcGFyc2VGbG9hdChzdHIpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIGV4cG9ydHMucGFyc2VCb29sZWFucyA9IGZ1bmN0aW9uKHN0cikge1xuICAgIGlmICgvXig/OnRydWV8ZmFsc2UpJC9pLnRlc3Qoc3RyKSkge1xuICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICB2YXIgYnVpbGRlciwgZGVmYXVsdHMsIHBhcnNlciwgcHJvY2Vzc29ycyxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4gIGJ1aWxkZXIgPSByZXF1aXJlKCcuL2J1aWxkZXInKTtcblxuICBwYXJzZXIgPSByZXF1aXJlKCcuL3BhcnNlcicpO1xuXG4gIHByb2Nlc3NvcnMgPSByZXF1aXJlKCcuL3Byb2Nlc3NvcnMnKTtcblxuICBleHBvcnRzLmRlZmF1bHRzID0gZGVmYXVsdHMuZGVmYXVsdHM7XG5cbiAgZXhwb3J0cy5wcm9jZXNzb3JzID0gcHJvY2Vzc29ycztcblxuICBleHBvcnRzLlZhbGlkYXRpb25FcnJvciA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFZhbGlkYXRpb25FcnJvciwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSkge1xuICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gVmFsaWRhdGlvbkVycm9yO1xuXG4gIH0pKEVycm9yKTtcblxuICBleHBvcnRzLkJ1aWxkZXIgPSBidWlsZGVyLkJ1aWxkZXI7XG5cbiAgZXhwb3J0cy5QYXJzZXIgPSBwYXJzZXIuUGFyc2VyO1xuXG4gIGV4cG9ydHMucGFyc2VTdHJpbmcgPSBwYXJzZXIucGFyc2VTdHJpbmc7XG5cbiAgZXhwb3J0cy5wYXJzZVN0cmluZ1Byb21pc2UgPSBwYXJzZXIucGFyc2VTdHJpbmdQcm9taXNlO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgRGlzY29ubmVjdGVkOiAxLFxuICAgIFByZWNlZGluZzogMixcbiAgICBGb2xsb3dpbmc6IDQsXG4gICAgQ29udGFpbnM6IDgsXG4gICAgQ29udGFpbmVkQnk6IDE2LFxuICAgIEltcGxlbWVudGF0aW9uU3BlY2lmaWM6IDMyXG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBFbGVtZW50OiAxLFxuICAgIEF0dHJpYnV0ZTogMixcbiAgICBUZXh0OiAzLFxuICAgIENEYXRhOiA0LFxuICAgIEVudGl0eVJlZmVyZW5jZTogNSxcbiAgICBFbnRpdHlEZWNsYXJhdGlvbjogNixcbiAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246IDcsXG4gICAgQ29tbWVudDogOCxcbiAgICBEb2N1bWVudDogOSxcbiAgICBEb2NUeXBlOiAxMCxcbiAgICBEb2N1bWVudEZyYWdtZW50OiAxMSxcbiAgICBOb3RhdGlvbkRlY2xhcmF0aW9uOiAxMixcbiAgICBEZWNsYXJhdGlvbjogMjAxLFxuICAgIFJhdzogMjAyLFxuICAgIEF0dHJpYnV0ZURlY2xhcmF0aW9uOiAyMDMsXG4gICAgRWxlbWVudERlY2xhcmF0aW9uOiAyMDQsXG4gICAgRHVtbXk6IDIwNVxuICB9O1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIGFzc2lnbiwgZ2V0VmFsdWUsIGlzQXJyYXksIGlzRW1wdHksIGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1BsYWluT2JqZWN0LFxuICAgIHNsaWNlID0gW10uc2xpY2UsXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGFzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpLCBrZXksIGxlbiwgc291cmNlLCBzb3VyY2VzLCB0YXJnZXQ7XG4gICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdLCBzb3VyY2VzID0gMiA8PSBhcmd1bWVudHMubGVuZ3RoID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107XG4gICAgaWYgKGlzRnVuY3Rpb24oT2JqZWN0LmFzc2lnbikpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gc291cmNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzb3VyY2UgPSBzb3VyY2VzW2ldO1xuICAgICAgICBpZiAoc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWwpIHtcbiAgICByZXR1cm4gISF2YWwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH07XG5cbiAgaXNPYmplY3QgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIgcmVmO1xuICAgIHJldHVybiAhIXZhbCAmJiAoKHJlZiA9IHR5cGVvZiB2YWwpID09PSAnZnVuY3Rpb24nIHx8IHJlZiA9PT0gJ29iamVjdCcpO1xuICB9O1xuXG4gIGlzQXJyYXkgPSBmdW5jdGlvbih2YWwpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihBcnJheS5pc0FycmF5KSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cbiAgfTtcblxuICBpc0VtcHR5ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXR1cm4gIXZhbC5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoa2V5IGluIHZhbCkge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbCh2YWwsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIHZhciBjdG9yLCBwcm90bztcbiAgICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiAocHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKSkgJiYgKGN0b3IgPSBwcm90by5jb25zdHJ1Y3RvcikgJiYgKHR5cGVvZiBjdG9yID09PSAnZnVuY3Rpb24nKSAmJiAoY3RvciBpbnN0YW5jZW9mIGN0b3IpICYmIChGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoT2JqZWN0KSk7XG4gIH07XG5cbiAgZ2V0VmFsdWUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoaXNGdW5jdGlvbihvYmoudmFsdWVPZikpIHtcbiAgICAgIHJldHVybiBvYmoudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0cy5hc3NpZ24gPSBhc3NpZ247XG5cbiAgbW9kdWxlLmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbiAgbW9kdWxlLmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuICBtb2R1bGUuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuICBtb2R1bGUuZXhwb3J0cy5pc0VtcHR5ID0gaXNFbXB0eTtcblxuICBtb2R1bGUuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcblxuICBtb2R1bGUuZXhwb3J0cy5nZXRWYWx1ZSA9IGdldFZhbHVlO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTm9uZTogMCxcbiAgICBPcGVuVGFnOiAxLFxuICAgIEluc2lkZVRhZzogMixcbiAgICBDbG9zZVRhZzogM1xuICB9O1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxBdHRyaWJ1dGUsIFhNTE5vZGU7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MQXR0cmlidXRlID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTEF0dHJpYnV0ZShwYXJlbnQsIG5hbWUsIHZhbHVlKSB7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnBhcmVudC5vcHRpb25zO1xuICAgICAgICB0aGlzLnN0cmluZ2lmeSA9IHRoaXMucGFyZW50LnN0cmluZ2lmeTtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBhdHRyaWJ1dGUgbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLnN0cmluZ2lmeS5uYW1lKG5hbWUpO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5LmF0dFZhbHVlKHZhbHVlKTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkF0dHJpYnV0ZTtcbiAgICAgIHRoaXMuaXNJZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zY2hlbWFUeXBlSW5mbyA9IG51bGw7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUsICdub2RlVHlwZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQXR0cmlidXRlLnByb3RvdHlwZSwgJ293bmVyRWxlbWVudCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxBdHRyaWJ1dGUucHJvdG90eXBlLCAndGV4dENvbnRlbnQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQXR0cmlidXRlLnByb3RvdHlwZSwgJ25hbWVzcGFjZVVSSScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxBdHRyaWJ1dGUucHJvdG90eXBlLCAncHJlZml4Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUsICdsb2NhbE5hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUsICdzcGVjaWZpZWQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxBdHRyaWJ1dGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuYXR0cmlidXRlKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUuZGVidWdJbmZvID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgbmFtZSA9IG5hbWUgfHwgdGhpcy5uYW1lO1xuICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJwYXJlbnQ6IDxcIiArIHRoaXMucGFyZW50Lm5hbWUgKyBcIj5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcImF0dHJpYnV0ZToge1wiICsgbmFtZSArIFwifSwgcGFyZW50OiA8XCIgKyB0aGlzLnBhcmVudC5uYW1lICsgXCI+XCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUuaXNFcXVhbE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAobm9kZS5uYW1lc3BhY2VVUkkgIT09IHRoaXMubmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnByZWZpeCAhPT0gdGhpcy5wcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubG9jYWxOYW1lICE9PSB0aGlzLmxvY2FsTmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS52YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTEF0dHJpYnV0ZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxDRGF0YSwgWE1MQ2hhcmFjdGVyRGF0YSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIFhNTENoYXJhY3RlckRhdGEgPSByZXF1aXJlKCcuL1hNTENoYXJhY3RlckRhdGEnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTENEYXRhID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MQ0RhdGEsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MQ0RhdGEocGFyZW50LCB0ZXh0KSB7XG4gICAgICBYTUxDRGF0YS5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIENEQVRBIHRleHQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5hbWUgPSBcIiNjZGF0YS1zZWN0aW9uXCI7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5DRGF0YTtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0cmluZ2lmeS5jZGF0YSh0ZXh0KTtcbiAgICB9XG5cbiAgICBYTUxDRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxDRGF0YS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5jZGF0YSh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MQ0RhdGE7XG5cbiAgfSkoWE1MQ2hhcmFjdGVyRGF0YSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MQ2hhcmFjdGVyRGF0YSwgWE1MTm9kZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTENoYXJhY3RlckRhdGEgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxDaGFyYWN0ZXJEYXRhLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTENoYXJhY3RlckRhdGEocGFyZW50KSB7XG4gICAgICBYTUxDaGFyYWN0ZXJEYXRhLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLCAnZGF0YScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSwgJ3RleHRDb250ZW50Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5zdWJzdHJpbmdEYXRhID0gZnVuY3Rpb24ob2Zmc2V0LCBjb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5hcHBlbmREYXRhID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLmluc2VydERhdGEgPSBmdW5jdGlvbihvZmZzZXQsIGFyZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5kZWxldGVEYXRhID0gZnVuY3Rpb24ob2Zmc2V0LCBjb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5yZXBsYWNlRGF0YSA9IGZ1bmN0aW9uKG9mZnNldCwgY291bnQsIGFyZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5pc0VxdWFsTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmICghWE1MQ2hhcmFjdGVyRGF0YS5fX3N1cGVyX18uaXNFcXVhbE5vZGUuYXBwbHkodGhpcywgYXJndW1lbnRzKS5pc0VxdWFsTm9kZShub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5kYXRhICE9PSB0aGlzLmRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxDaGFyYWN0ZXJEYXRhO1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxDaGFyYWN0ZXJEYXRhLCBYTUxDb21tZW50LFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MQ2hhcmFjdGVyRGF0YSA9IHJlcXVpcmUoJy4vWE1MQ2hhcmFjdGVyRGF0YScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MQ29tbWVudCA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTENvbW1lbnQsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MQ29tbWVudChwYXJlbnQsIHRleHQpIHtcbiAgICAgIFhNTENvbW1lbnQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBjb21tZW50IHRleHQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5hbWUgPSBcIiNjb21tZW50XCI7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Db21tZW50O1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5LmNvbW1lbnQodGV4dCk7XG4gICAgfVxuXG4gICAgWE1MQ29tbWVudC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxDb21tZW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmNvbW1lbnQodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTENvbW1lbnQ7XG5cbiAgfSkoWE1MQ2hhcmFjdGVyRGF0YSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MRE9NQ29uZmlndXJhdGlvbiwgWE1MRE9NRXJyb3JIYW5kbGVyLCBYTUxET01TdHJpbmdMaXN0O1xuXG4gIFhNTERPTUVycm9ySGFuZGxlciA9IHJlcXVpcmUoJy4vWE1MRE9NRXJyb3JIYW5kbGVyJyk7XG5cbiAgWE1MRE9NU3RyaW5nTGlzdCA9IHJlcXVpcmUoJy4vWE1MRE9NU3RyaW5nTGlzdCcpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRE9NQ29uZmlndXJhdGlvbiA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxET01Db25maWd1cmF0aW9uKCkge1xuICAgICAgdmFyIGNsb25lZFNlbGY7XG4gICAgICB0aGlzLmRlZmF1bHRQYXJhbXMgPSB7XG4gICAgICAgIFwiY2Fub25pY2FsLWZvcm1cIjogZmFsc2UsXG4gICAgICAgIFwiY2RhdGEtc2VjdGlvbnNcIjogZmFsc2UsXG4gICAgICAgIFwiY29tbWVudHNcIjogZmFsc2UsXG4gICAgICAgIFwiZGF0YXR5cGUtbm9ybWFsaXphdGlvblwiOiBmYWxzZSxcbiAgICAgICAgXCJlbGVtZW50LWNvbnRlbnQtd2hpdGVzcGFjZVwiOiB0cnVlLFxuICAgICAgICBcImVudGl0aWVzXCI6IHRydWUsXG4gICAgICAgIFwiZXJyb3ItaGFuZGxlclwiOiBuZXcgWE1MRE9NRXJyb3JIYW5kbGVyKCksXG4gICAgICAgIFwiaW5mb3NldFwiOiB0cnVlLFxuICAgICAgICBcInZhbGlkYXRlLWlmLXNjaGVtYVwiOiBmYWxzZSxcbiAgICAgICAgXCJuYW1lc3BhY2VzXCI6IHRydWUsXG4gICAgICAgIFwibmFtZXNwYWNlLWRlY2xhcmF0aW9uc1wiOiB0cnVlLFxuICAgICAgICBcIm5vcm1hbGl6ZS1jaGFyYWN0ZXJzXCI6IGZhbHNlLFxuICAgICAgICBcInNjaGVtYS1sb2NhdGlvblwiOiAnJyxcbiAgICAgICAgXCJzY2hlbWEtdHlwZVwiOiAnJyxcbiAgICAgICAgXCJzcGxpdC1jZGF0YS1zZWN0aW9uc1wiOiB0cnVlLFxuICAgICAgICBcInZhbGlkYXRlXCI6IGZhbHNlLFxuICAgICAgICBcIndlbGwtZm9ybWVkXCI6IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnBhcmFtcyA9IGNsb25lZFNlbGYgPSBPYmplY3QuY3JlYXRlKHRoaXMuZGVmYXVsdFBhcmFtcyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERPTUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLCAncGFyYW1ldGVyTmFtZXMnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IFhNTERPTVN0cmluZ0xpc3QoT2JqZWN0LmtleXModGhpcy5kZWZhdWx0UGFyYW1zKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxET01Db25maWd1cmF0aW9uLnByb3RvdHlwZS5nZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICBpZiAodGhpcy5wYXJhbXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zW25hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTERPTUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmNhblNldFBhcmFtZXRlciA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgWE1MRE9NQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuc2V0UGFyYW1ldGVyID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZSB0aGlzLnBhcmFtc1tuYW1lXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERPTUNvbmZpZ3VyYXRpb247XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxET01FcnJvckhhbmRsZXI7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxET01FcnJvckhhbmRsZXIgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MRE9NRXJyb3JIYW5kbGVyKCkge31cblxuICAgIFhNTERPTUVycm9ySGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRXJyb3IgPSBmdW5jdGlvbihlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERPTUVycm9ySGFuZGxlcjtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTERPTUltcGxlbWVudGF0aW9uO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRE9NSW1wbGVtZW50YXRpb24gPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MRE9NSW1wbGVtZW50YXRpb24oKSB7fVxuXG4gICAgWE1MRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmhhc0ZlYXR1cmUgPSBmdW5jdGlvbihmZWF0dXJlLCB2ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgWE1MRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50VHlwZSA9IGZ1bmN0aW9uKHF1YWxpZmllZE5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfTtcblxuICAgIFhNTERPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudCA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgZG9jdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfTtcblxuICAgIFhNTERPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5jcmVhdGVIVE1MRG9jdW1lbnQgPSBmdW5jdGlvbih0aXRsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfTtcblxuICAgIFhNTERPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZS5nZXRGZWF0dXJlID0gZnVuY3Rpb24oZmVhdHVyZSwgdmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxET01JbXBsZW1lbnRhdGlvbjtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTERPTVN0cmluZ0xpc3Q7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxET01TdHJpbmdMaXN0ID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTERPTVN0cmluZ0xpc3QoYXJyKSB7XG4gICAgICB0aGlzLmFyciA9IGFyciB8fCBbXTtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRE9NU3RyaW5nTGlzdC5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcnIubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MRE9NU3RyaW5nTGlzdC5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJbaW5kZXhdIHx8IG51bGw7XG4gICAgfTtcblxuICAgIFhNTERPTVN0cmluZ0xpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnIuaW5kZXhPZihzdHIpICE9PSAtMTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERPTVN0cmluZ0xpc3Q7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRFREQXR0TGlzdCwgWE1MTm9kZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERUREF0dExpc3QgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEVERBdHRMaXN0LCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERUREF0dExpc3QocGFyZW50LCBlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICBYTUxEVERBdHRMaXN0Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAoZWxlbWVudE5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIERURCBlbGVtZW50IG5hbWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGF0dHJpYnV0ZSBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKGVsZW1lbnROYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWF0dHJpYnV0ZVR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgYXR0cmlidXRlIHR5cGUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oZWxlbWVudE5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghZGVmYXVsdFZhbHVlVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIERURCBhdHRyaWJ1dGUgZGVmYXVsdC4gXCIgKyB0aGlzLmRlYnVnSW5mbyhlbGVtZW50TmFtZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZVR5cGUuaW5kZXhPZignIycpICE9PSAwKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZVR5cGUgPSAnIycgKyBkZWZhdWx0VmFsdWVUeXBlO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWZhdWx0VmFsdWVUeXBlLm1hdGNoKC9eKCNSRVFVSVJFRHwjSU1QTElFRHwjRklYRUR8I0RFRkFVTFQpJC8pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGVmYXVsdCB2YWx1ZSB0eXBlOyBleHBlY3RlZDogI1JFUVVJUkVELCAjSU1QTElFRCwgI0ZJWEVEIG9yICNERUZBVUxULiBcIiArIHRoaXMuZGVidWdJbmZvKGVsZW1lbnROYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICYmICFkZWZhdWx0VmFsdWVUeXBlLm1hdGNoKC9eKCNGSVhFRHwjREVGQVVMVCkkLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVmYXVsdCB2YWx1ZSBvbmx5IGFwcGxpZXMgdG8gI0ZJWEVEIG9yICNERUZBVUxULiBcIiArIHRoaXMuZGVidWdJbmZvKGVsZW1lbnROYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmVsZW1lbnROYW1lID0gdGhpcy5zdHJpbmdpZnkubmFtZShlbGVtZW50TmFtZSk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5BdHRyaWJ1dGVEZWNsYXJhdGlvbjtcbiAgICAgIHRoaXMuYXR0cmlidXRlTmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUoYXR0cmlidXRlTmFtZSk7XG4gICAgICB0aGlzLmF0dHJpYnV0ZVR5cGUgPSB0aGlzLnN0cmluZ2lmeS5kdGRBdHRUeXBlKGF0dHJpYnV0ZVR5cGUpO1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHRoaXMuc3RyaW5naWZ5LmR0ZEF0dERlZmF1bHQoZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9IGRlZmF1bHRWYWx1ZVR5cGU7XG4gICAgfVxuXG4gICAgWE1MRFREQXR0TGlzdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5kdGRBdHRMaXN0KHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEVERBdHRMaXN0O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxEVERFbGVtZW50LCBYTUxOb2RlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRFRERWxlbWVudCA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERUREVsZW1lbnQsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRFRERWxlbWVudChwYXJlbnQsIG5hbWUsIHZhbHVlKSB7XG4gICAgICBYTUxEVERFbGVtZW50Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVsZW1lbnQgbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSAnKCNQQ0RBVEEpJztcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9ICcoJyArIHZhbHVlLmpvaW4oJywnKSArICcpJztcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUobmFtZSk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5FbGVtZW50RGVjbGFyYXRpb247XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuZHRkRWxlbWVudFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBYTUxEVERFbGVtZW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmR0ZEVsZW1lbnQodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERUREVsZW1lbnQ7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTERUREVudGl0eSwgWE1MTm9kZSwgaXNPYmplY3QsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBpc09iamVjdCA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLmlzT2JqZWN0O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERUREVudGl0eSA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERUREVudGl0eSwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEVERFbnRpdHkocGFyZW50LCBwZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIFhNTERUREVudGl0eS5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIERURCBlbnRpdHkgbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIERURCBlbnRpdHkgdmFsdWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5wZSA9ICEhcGU7XG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLnN0cmluZ2lmeS5uYW1lKG5hbWUpO1xuICAgICAgdGhpcy50eXBlID0gTm9kZVR5cGUuRW50aXR5RGVjbGFyYXRpb247XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuZHRkRW50aXR5VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLmludGVybmFsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdmFsdWUucHViSUQgJiYgIXZhbHVlLnN5c0lEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHVibGljIGFuZC9vciBzeXN0ZW0gaWRlbnRpZmllcnMgYXJlIHJlcXVpcmVkIGZvciBhbiBleHRlcm5hbCBlbnRpdHkuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5wdWJJRCAmJiAhdmFsdWUuc3lzSUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTeXN0ZW0gaWRlbnRpZmllciBpcyByZXF1aXJlZCBmb3IgYSBwdWJsaWMgZXh0ZXJuYWwgZW50aXR5LiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVybmFsID0gZmFsc2U7XG4gICAgICAgIGlmICh2YWx1ZS5wdWJJRCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wdWJJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFB1YklEKHZhbHVlLnB1YklEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuc3lzSUQgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuc3lzSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRTeXNJRCh2YWx1ZS5zeXNJRCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLm5EYXRhICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm5EYXRhID0gdGhpcy5zdHJpbmdpZnkuZHRkTkRhdGEodmFsdWUubkRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBlICYmIHRoaXMubkRhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3RhdGlvbiBkZWNsYXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiBhIHBhcmFtZXRlciBlbnRpdHkuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERUREVudGl0eS5wcm90b3R5cGUsICdwdWJsaWNJZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YklEO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERUREVudGl0eS5wcm90b3R5cGUsICdzeXN0ZW1JZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5c0lEO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERUREVudGl0eS5wcm90b3R5cGUsICdub3RhdGlvbk5hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uRGF0YSB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERUREVudGl0eS5wcm90b3R5cGUsICdpbnB1dEVuY29kaW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ3htbEVuY29kaW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ3htbFZlcnNpb24nLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTERUREVudGl0eS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5kdGRFbnRpdHkodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERUREVudGl0eTtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRFRETm90YXRpb24sIFhNTE5vZGUsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxEVEROb3RhdGlvbiA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERURE5vdGF0aW9uLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERURE5vdGF0aW9uKHBhcmVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIFhNTERURE5vdGF0aW9uLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIG5vdGF0aW9uIG5hbWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCF2YWx1ZS5wdWJJRCAmJiAhdmFsdWUuc3lzSUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHVibGljIG9yIHN5c3RlbSBpZGVudGlmaWVycyBhcmUgcmVxdWlyZWQgZm9yIGFuIGV4dGVybmFsIGVudGl0eS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLnN0cmluZ2lmeS5uYW1lKG5hbWUpO1xuICAgICAgdGhpcy50eXBlID0gTm9kZVR5cGUuTm90YXRpb25EZWNsYXJhdGlvbjtcbiAgICAgIGlmICh2YWx1ZS5wdWJJRCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMucHViSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRQdWJJRCh2YWx1ZS5wdWJJRCk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUuc3lzSUQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN5c0lEID0gdGhpcy5zdHJpbmdpZnkuZHRkU3lzSUQodmFsdWUuc3lzSUQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEVEROb3RhdGlvbi5wcm90b3R5cGUsICdwdWJsaWNJZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YklEO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERURE5vdGF0aW9uLnByb3RvdHlwZSwgJ3N5c3RlbUlkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3lzSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxEVEROb3RhdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5kdGROb3RhdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRFRETm90YXRpb247XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTERlY2xhcmF0aW9uLCBYTUxOb2RlLCBpc09iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNPYmplY3Q7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEZWNsYXJhdGlvbiwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEZWNsYXJhdGlvbihwYXJlbnQsIHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICB2YXIgcmVmO1xuICAgICAgWE1MRGVjbGFyYXRpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChpc09iamVjdCh2ZXJzaW9uKSkge1xuICAgICAgICByZWYgPSB2ZXJzaW9uLCB2ZXJzaW9uID0gcmVmLnZlcnNpb24sIGVuY29kaW5nID0gcmVmLmVuY29kaW5nLCBzdGFuZGFsb25lID0gcmVmLnN0YW5kYWxvbmU7XG4gICAgICB9XG4gICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgdmVyc2lvbiA9ICcxLjAnO1xuICAgICAgfVxuICAgICAgdGhpcy50eXBlID0gTm9kZVR5cGUuRGVjbGFyYXRpb247XG4gICAgICB0aGlzLnZlcnNpb24gPSB0aGlzLnN0cmluZ2lmeS54bWxWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IHRoaXMuc3RyaW5naWZ5LnhtbEVuY29kaW5nKGVuY29kaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFuZGFsb25lICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zdGFuZGFsb25lID0gdGhpcy5zdHJpbmdpZnkueG1sU3RhbmRhbG9uZShzdGFuZGFsb25lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBYTUxEZWNsYXJhdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5kZWNsYXJhdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRGVjbGFyYXRpb247XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTERUREF0dExpc3QsIFhNTERUREVsZW1lbnQsIFhNTERUREVudGl0eSwgWE1MRFRETm90YXRpb24sIFhNTERvY1R5cGUsIFhNTE5hbWVkTm9kZU1hcCwgWE1MTm9kZSwgaXNPYmplY3QsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBpc09iamVjdCA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLmlzT2JqZWN0O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxEVERBdHRMaXN0ID0gcmVxdWlyZSgnLi9YTUxEVERBdHRMaXN0Jyk7XG5cbiAgWE1MRFRERW50aXR5ID0gcmVxdWlyZSgnLi9YTUxEVERFbnRpdHknKTtcblxuICBYTUxEVERFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxEVERFbGVtZW50Jyk7XG5cbiAgWE1MRFRETm90YXRpb24gPSByZXF1aXJlKCcuL1hNTERURE5vdGF0aW9uJyk7XG5cbiAgWE1MTmFtZWROb2RlTWFwID0gcmVxdWlyZSgnLi9YTUxOYW1lZE5vZGVNYXAnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERvY1R5cGUgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEb2NUeXBlLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERvY1R5cGUocGFyZW50LCBwdWJJRCwgc3lzSUQpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgbGVuLCByZWYsIHJlZjEsIHJlZjI7XG4gICAgICBYTUxEb2NUeXBlLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Eb2NUeXBlO1xuICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbikge1xuICAgICAgICByZWYgPSBwYXJlbnQuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5FbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBjaGlsZC5uYW1lO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRvY3VtZW50T2JqZWN0ID0gcGFyZW50O1xuICAgICAgaWYgKGlzT2JqZWN0KHB1YklEKSkge1xuICAgICAgICByZWYxID0gcHViSUQsIHB1YklEID0gcmVmMS5wdWJJRCwgc3lzSUQgPSByZWYxLnN5c0lEO1xuICAgICAgfVxuICAgICAgaWYgKHN5c0lEID09IG51bGwpIHtcbiAgICAgICAgcmVmMiA9IFtwdWJJRCwgc3lzSURdLCBzeXNJRCA9IHJlZjJbMF0sIHB1YklEID0gcmVmMlsxXTtcbiAgICAgIH1cbiAgICAgIGlmIChwdWJJRCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMucHViSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRQdWJJRChwdWJJRCk7XG4gICAgICB9XG4gICAgICBpZiAoc3lzSUQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN5c0lEID0gdGhpcy5zdHJpbmdpZnkuZHRkU3lzSUQoc3lzSUQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2NUeXBlLnByb3RvdHlwZSwgJ2VudGl0aWVzJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoaWxkLCBpLCBsZW4sIG5vZGVzLCByZWY7XG4gICAgICAgIG5vZGVzID0ge307XG4gICAgICAgIHJlZiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICAgIGlmICgoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRW50aXR5RGVjbGFyYXRpb24pICYmICFjaGlsZC5wZSkge1xuICAgICAgICAgICAgbm9kZXNbY2hpbGQubmFtZV0gPSBjaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBYTUxOYW1lZE5vZGVNYXAobm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY1R5cGUucHJvdG90eXBlLCAnbm90YXRpb25zJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoaWxkLCBpLCBsZW4sIG5vZGVzLCByZWY7XG4gICAgICAgIG5vZGVzID0ge307XG4gICAgICAgIHJlZiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5Ob3RhdGlvbkRlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgICBub2Rlc1tjaGlsZC5uYW1lXSA9IGNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFhNTE5hbWVkTm9kZU1hcChub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jVHlwZS5wcm90b3R5cGUsICdwdWJsaWNJZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1YklEO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY1R5cGUucHJvdG90eXBlLCAnc3lzdGVtSWQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zeXNJRDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2NUeXBlLnByb3RvdHlwZSwgJ2ludGVybmFsU3Vic2V0Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxEVERFbGVtZW50KHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuYXR0TGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERUREF0dExpc3QodGhpcywgZWxlbWVudE5hbWUsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVR5cGUsIGRlZmF1bHRWYWx1ZVR5cGUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmVudGl0eSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxEVERFbnRpdHkodGhpcywgZmFsc2UsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUucEVudGl0eSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxEVERFbnRpdHkodGhpcywgdHJ1ZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5ub3RhdGlvbiA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxEVEROb3RhdGlvbih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuZG9jVHlwZSh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5lbGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmF0dCA9IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dExpc3QoZWxlbWVudE5hbWUsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVR5cGUsIGRlZmF1bHRWYWx1ZVR5cGUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmVudCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRpdHkobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5wZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBFbnRpdHkobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5ub3QgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90YXRpb24obmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdCgpIHx8IHRoaXMuZG9jdW1lbnRPYmplY3Q7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmlzRXF1YWxOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKCFYTUxEb2NUeXBlLl9fc3VwZXJfXy5pc0VxdWFsTm9kZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLmlzRXF1YWxOb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5wdWJsaWNJZCAhPT0gdGhpcy5wdWJsaWNJZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5zeXN0ZW1JZCAhPT0gdGhpcy5zeXN0ZW1JZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERvY1R5cGU7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTERPTUNvbmZpZ3VyYXRpb24sIFhNTERPTUltcGxlbWVudGF0aW9uLCBYTUxEb2N1bWVudCwgWE1MTm9kZSwgWE1MU3RyaW5nV3JpdGVyLCBYTUxTdHJpbmdpZmllciwgaXNQbGFpbk9iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL1V0aWxpdHknKS5pc1BsYWluT2JqZWN0O1xuXG4gIFhNTERPTUltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9YTUxET01JbXBsZW1lbnRhdGlvbicpO1xuXG4gIFhNTERPTUNvbmZpZ3VyYXRpb24gPSByZXF1aXJlKCcuL1hNTERPTUNvbmZpZ3VyYXRpb24nKTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MU3RyaW5naWZpZXIgPSByZXF1aXJlKCcuL1hNTFN0cmluZ2lmaWVyJyk7XG5cbiAgWE1MU3RyaW5nV3JpdGVyID0gcmVxdWlyZSgnLi9YTUxTdHJpbmdXcml0ZXInKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERvY3VtZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRG9jdW1lbnQsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRG9jdW1lbnQob3B0aW9ucykge1xuICAgICAgWE1MRG9jdW1lbnQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbnVsbCk7XG4gICAgICB0aGlzLm5hbWUgPSBcIiNkb2N1bWVudFwiO1xuICAgICAgdGhpcy50eXBlID0gTm9kZVR5cGUuRG9jdW1lbnQ7XG4gICAgICB0aGlzLmRvY3VtZW50VVJJID0gbnVsbDtcbiAgICAgIHRoaXMuZG9tQ29uZmlnID0gbmV3IFhNTERPTUNvbmZpZ3VyYXRpb24oKTtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICBpZiAoIW9wdGlvbnMud3JpdGVyKSB7XG4gICAgICAgIG9wdGlvbnMud3JpdGVyID0gbmV3IFhNTFN0cmluZ1dyaXRlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMuc3RyaW5naWZ5ID0gbmV3IFhNTFN0cmluZ2lmaWVyKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICdpbXBsZW1lbnRhdGlvbicsIHtcbiAgICAgIHZhbHVlOiBuZXcgWE1MRE9NSW1wbGVtZW50YXRpb24oKVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2RvY3R5cGUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGQsIGksIGxlbiwgcmVmO1xuICAgICAgICByZWYgPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjaGlsZCA9IHJlZltpXTtcbiAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRG9jVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICdkb2N1bWVudEVsZW1lbnQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290T2JqZWN0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnaW5wdXRFbmNvZGluZycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ3N0cmljdEVycm9yQ2hlY2tpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAneG1sRW5jb2RpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggIT09IDAgJiYgdGhpcy5jaGlsZHJlblswXS50eXBlID09PSBOb2RlVHlwZS5EZWNsYXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuWzBdLmVuY29kaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAneG1sU3RhbmRhbG9uZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCAhPT0gMCAmJiB0aGlzLmNoaWxkcmVuWzBdLnR5cGUgPT09IE5vZGVUeXBlLkRlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0uc3RhbmRhbG9uZSA9PT0gJ3llcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAneG1sVmVyc2lvbicsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCAhPT0gMCAmJiB0aGlzLmNoaWxkcmVuWzBdLnR5cGUgPT09IE5vZGVUeXBlLkRlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0udmVyc2lvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gXCIxLjBcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ1VSTCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VVJJO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ29yaWdpbicsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2NvbXBhdE1vZGUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICdjaGFyYWN0ZXJTZXQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICdjb250ZW50VHlwZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHdyaXRlcikge1xuICAgICAgdmFyIHdyaXRlck9wdGlvbnM7XG4gICAgICB3cml0ZXJPcHRpb25zID0ge307XG4gICAgICBpZiAoIXdyaXRlcikge1xuICAgICAgICB3cml0ZXIgPSB0aGlzLm9wdGlvbnMud3JpdGVyO1xuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHdyaXRlcikpIHtcbiAgICAgICAgd3JpdGVyT3B0aW9ucyA9IHdyaXRlcjtcbiAgICAgICAgd3JpdGVyID0gdGhpcy5vcHRpb25zLndyaXRlcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cml0ZXIuZG9jdW1lbnQodGhpcywgd3JpdGVyLmZpbHRlck9wdGlvbnMod3JpdGVyT3B0aW9ucykpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5kb2N1bWVudCh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKHRhZ05hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZVRleHROb2RlID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUNEQVRBU2VjdGlvbiA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uKHRhcmdldCwgZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRW50aXR5UmVmZXJlbmNlID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbih0YWduYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlID0gZnVuY3Rpb24oaW1wb3J0ZWROb2RlLCBkZWVwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUF0dHJpYnV0ZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRCeUlkID0gZnVuY3Rpb24oZWxlbWVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5hZG9wdE5vZGUgPSBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLm5vcm1hbGl6ZURvY3VtZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5yZW5hbWVOb2RlID0gZnVuY3Rpb24obm9kZSwgbmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24oY2xhc3NOYW1lcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRXZlbnQgPSBmdW5jdGlvbihldmVudEludGVyZmFjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlUmFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZU5vZGVJdGVyYXRvciA9IGZ1bmN0aW9uKHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlVHJlZVdhbGtlciA9IGZ1bmN0aW9uKHJvb3QsIHdoYXRUb1Nob3csIGZpbHRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRG9jdW1lbnQ7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFdyaXRlclN0YXRlLCBYTUxBdHRyaWJ1dGUsIFhNTENEYXRhLCBYTUxDb21tZW50LCBYTUxEVERBdHRMaXN0LCBYTUxEVERFbGVtZW50LCBYTUxEVERFbnRpdHksIFhNTERURE5vdGF0aW9uLCBYTUxEZWNsYXJhdGlvbiwgWE1MRG9jVHlwZSwgWE1MRG9jdW1lbnQsIFhNTERvY3VtZW50Q0IsIFhNTEVsZW1lbnQsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgWE1MUmF3LCBYTUxTdHJpbmdXcml0ZXIsIFhNTFN0cmluZ2lmaWVyLCBYTUxUZXh0LCBnZXRWYWx1ZSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzUGxhaW5PYmplY3QsIHJlZixcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgcmVmID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGlzT2JqZWN0ID0gcmVmLmlzT2JqZWN0LCBpc0Z1bmN0aW9uID0gcmVmLmlzRnVuY3Rpb24sIGlzUGxhaW5PYmplY3QgPSByZWYuaXNQbGFpbk9iamVjdCwgZ2V0VmFsdWUgPSByZWYuZ2V0VmFsdWU7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MRG9jdW1lbnQgPSByZXF1aXJlKCcuL1hNTERvY3VtZW50Jyk7XG5cbiAgWE1MRWxlbWVudCA9IHJlcXVpcmUoJy4vWE1MRWxlbWVudCcpO1xuXG4gIFhNTENEYXRhID0gcmVxdWlyZSgnLi9YTUxDRGF0YScpO1xuXG4gIFhNTENvbW1lbnQgPSByZXF1aXJlKCcuL1hNTENvbW1lbnQnKTtcblxuICBYTUxSYXcgPSByZXF1aXJlKCcuL1hNTFJhdycpO1xuXG4gIFhNTFRleHQgPSByZXF1aXJlKCcuL1hNTFRleHQnKTtcblxuICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSByZXF1aXJlKCcuL1hNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbicpO1xuXG4gIFhNTERlY2xhcmF0aW9uID0gcmVxdWlyZSgnLi9YTUxEZWNsYXJhdGlvbicpO1xuXG4gIFhNTERvY1R5cGUgPSByZXF1aXJlKCcuL1hNTERvY1R5cGUnKTtcblxuICBYTUxEVERBdHRMaXN0ID0gcmVxdWlyZSgnLi9YTUxEVERBdHRMaXN0Jyk7XG5cbiAgWE1MRFRERW50aXR5ID0gcmVxdWlyZSgnLi9YTUxEVERFbnRpdHknKTtcblxuICBYTUxEVERFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxEVERFbGVtZW50Jyk7XG5cbiAgWE1MRFRETm90YXRpb24gPSByZXF1aXJlKCcuL1hNTERURE5vdGF0aW9uJyk7XG5cbiAgWE1MQXR0cmlidXRlID0gcmVxdWlyZSgnLi9YTUxBdHRyaWJ1dGUnKTtcblxuICBYTUxTdHJpbmdpZmllciA9IHJlcXVpcmUoJy4vWE1MU3RyaW5naWZpZXInKTtcblxuICBYTUxTdHJpbmdXcml0ZXIgPSByZXF1aXJlKCcuL1hNTFN0cmluZ1dyaXRlcicpO1xuXG4gIFdyaXRlclN0YXRlID0gcmVxdWlyZSgnLi9Xcml0ZXJTdGF0ZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRG9jdW1lbnRDQiA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxEb2N1bWVudENCKG9wdGlvbnMsIG9uRGF0YSwgb25FbmQpIHtcbiAgICAgIHZhciB3cml0ZXJPcHRpb25zO1xuICAgICAgdGhpcy5uYW1lID0gXCI/eG1sXCI7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Eb2N1bWVudDtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICB3cml0ZXJPcHRpb25zID0ge307XG4gICAgICBpZiAoIW9wdGlvbnMud3JpdGVyKSB7XG4gICAgICAgIG9wdGlvbnMud3JpdGVyID0gbmV3IFhNTFN0cmluZ1dyaXRlcigpO1xuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnMud3JpdGVyKSkge1xuICAgICAgICB3cml0ZXJPcHRpb25zID0gb3B0aW9ucy53cml0ZXI7XG4gICAgICAgIG9wdGlvbnMud3JpdGVyID0gbmV3IFhNTFN0cmluZ1dyaXRlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMud3JpdGVyID0gb3B0aW9ucy53cml0ZXI7XG4gICAgICB0aGlzLndyaXRlck9wdGlvbnMgPSB0aGlzLndyaXRlci5maWx0ZXJPcHRpb25zKHdyaXRlck9wdGlvbnMpO1xuICAgICAgdGhpcy5zdHJpbmdpZnkgPSBuZXcgWE1MU3RyaW5naWZpZXIob3B0aW9ucyk7XG4gICAgICB0aGlzLm9uRGF0YUNhbGxiYWNrID0gb25EYXRhIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICB0aGlzLm9uRW5kQ2FsbGJhY2sgPSBvbkVuZCB8fCBmdW5jdGlvbigpIHt9O1xuICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IC0xO1xuICAgICAgdGhpcy5vcGVuVGFncyA9IHt9O1xuICAgICAgdGhpcy5kb2N1bWVudFN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZG9jdW1lbnRDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucm9vdCA9IG51bGw7XG4gICAgfVxuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuY3JlYXRlQ2hpbGROb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIGF0dCwgYXR0TmFtZSwgYXR0cmlidXRlcywgY2hpbGQsIGksIGxlbiwgcmVmMSwgcmVmMjtcbiAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuQ0RhdGE6XG4gICAgICAgICAgdGhpcy5jZGF0YShub2RlLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5Db21tZW50OlxuICAgICAgICAgIHRoaXMuY29tbWVudChub2RlLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5FbGVtZW50OlxuICAgICAgICAgIGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICByZWYxID0gbm9kZS5hdHRyaWJzO1xuICAgICAgICAgIGZvciAoYXR0TmFtZSBpbiByZWYxKSB7XG4gICAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYxLCBhdHROYW1lKSkgY29udGludWU7XG4gICAgICAgICAgICBhdHQgPSByZWYxW2F0dE5hbWVdO1xuICAgICAgICAgICAgYXR0cmlidXRlc1thdHROYW1lXSA9IGF0dC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ub2RlKG5vZGUubmFtZSwgYXR0cmlidXRlcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuRHVtbXk6XG4gICAgICAgICAgdGhpcy5kdW1teSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLlJhdzpcbiAgICAgICAgICB0aGlzLnJhdyhub2RlLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5UZXh0OlxuICAgICAgICAgIHRoaXMudGV4dChub2RlLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbihub2RlLnRhcmdldCwgbm9kZS52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBYTUwgbm9kZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYSBKUyBvYmplY3Q6IFwiICsgbm9kZS5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAgIH1cbiAgICAgIHJlZjIgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjaGlsZCA9IHJlZjJbaV07XG4gICAgICAgIHRoaXMuY3JlYXRlQ2hpbGROb2RlKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnVwKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kdW1teSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLm5vZGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICB2YXIgcmVmMTtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBub2RlIG5hbWUuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm9vdCAmJiB0aGlzLmN1cnJlbnRMZXZlbCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRG9jdW1lbnQgY2FuIG9ubHkgaGF2ZSBvbmUgcm9vdCBub2RlLiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIGlmIChhdHRyaWJ1dGVzID09IG51bGwpIHtcbiAgICAgICAgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgfVxuICAgICAgYXR0cmlidXRlcyA9IGdldFZhbHVlKGF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKCFpc09iamVjdChhdHRyaWJ1dGVzKSkge1xuICAgICAgICByZWYxID0gW2F0dHJpYnV0ZXMsIHRleHRdLCB0ZXh0ID0gcmVmMVswXSwgYXR0cmlidXRlcyA9IHJlZjFbMV07XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnROb2RlID0gbmV3IFhNTEVsZW1lbnQodGhpcywgbmFtZSwgYXR0cmlidXRlcyk7XG4gICAgICB0aGlzLmN1cnJlbnROb2RlLmNoaWxkcmVuID0gZmFsc2U7XG4gICAgICB0aGlzLmN1cnJlbnRMZXZlbCsrO1xuICAgICAgdGhpcy5vcGVuVGFnc1t0aGlzLmN1cnJlbnRMZXZlbF0gPSB0aGlzLmN1cnJlbnROb2RlO1xuICAgICAgaWYgKHRleHQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnRleHQodGV4dCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgbGVuLCBvbGRWYWxpZGF0aW9uRmxhZywgcmVmMSwgcm9vdDtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlICYmIHRoaXMuY3VycmVudE5vZGUudHlwZSA9PT0gTm9kZVR5cGUuRG9jVHlwZSkge1xuICAgICAgICB0aGlzLmR0ZEVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpIHx8IGlzT2JqZWN0KG5hbWUpIHx8IGlzRnVuY3Rpb24obmFtZSkpIHtcbiAgICAgICAgICBvbGRWYWxpZGF0aW9uRmxhZyA9IHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb247XG4gICAgICAgICAgdGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgcm9vdCA9IG5ldyBYTUxEb2N1bWVudCh0aGlzLm9wdGlvbnMpLmVsZW1lbnQoJ1RFTVBfUk9PVCcpO1xuICAgICAgICAgIHJvb3QuZWxlbWVudChuYW1lKTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uID0gb2xkVmFsaWRhdGlvbkZsYWc7XG4gICAgICAgICAgcmVmMSA9IHJvb3QuY2hpbGRyZW47XG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmMS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY2hpbGQgPSByZWYxW2ldO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVDaGlsZE5vZGUoY2hpbGQpO1xuICAgICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy51cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm5vZGUobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5hdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIGF0dE5hbWUsIGF0dFZhbHVlO1xuICAgICAgaWYgKCF0aGlzLmN1cnJlbnROb2RlIHx8IHRoaXMuY3VycmVudE5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXR0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBhbiBlbGUoKSBjYWxsIGluIGNhbGxiYWNrIG1vZGUuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgIT0gbnVsbCkge1xuICAgICAgICBuYW1lID0gZ2V0VmFsdWUobmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICAgICAgZm9yIChhdHROYW1lIGluIG5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChuYW1lLCBhdHROYW1lKSkgY29udGludWU7XG4gICAgICAgICAgYXR0VmFsdWUgPSBuYW1lW2F0dE5hbWVdO1xuICAgICAgICAgIHRoaXMuYXR0cmlidXRlKGF0dE5hbWUsIGF0dFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5hcHBseSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMua2VlcE51bGxBdHRyaWJ1dGVzICYmICh2YWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudE5vZGUuYXR0cmlic1tuYW1lXSA9IG5ldyBYTUxBdHRyaWJ1dGUodGhpcywgbmFtZSwgXCJcIik7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudE5vZGUuYXR0cmlic1tuYW1lXSA9IG5ldyBYTUxBdHRyaWJ1dGUodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MVGV4dCh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci50ZXh0KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jZGF0YSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MQ0RhdGEodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuY2RhdGEobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTENvbW1lbnQodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuY29tbWVudChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxSYXcodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIucmF3KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5pbnN0cnVjdGlvbiA9IGZ1bmN0aW9uKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgIHZhciBpLCBpbnNUYXJnZXQsIGluc1ZhbHVlLCBsZW4sIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgdGFyZ2V0ID0gZ2V0VmFsdWUodGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSB0YXJnZXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpbnNUYXJnZXQgPSB0YXJnZXRbaV07XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbihpbnNUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHRhcmdldCkpIHtcbiAgICAgICAgZm9yIChpbnNUYXJnZXQgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwodGFyZ2V0LCBpbnNUYXJnZXQpKSBjb250aW51ZTtcbiAgICAgICAgICBpbnNWYWx1ZSA9IHRhcmdldFtpbnNUYXJnZXRdO1xuICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb24oaW5zVGFyZ2V0LCBpbnNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbmV3IFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbih0aGlzLCB0YXJnZXQsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIucHJvY2Vzc2luZ0luc3RydWN0aW9uKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIGlmICh0aGlzLmRvY3VtZW50U3RhcnRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkZWNsYXJhdGlvbigpIG11c3QgYmUgdGhlIGZpcnN0IG5vZGUuXCIpO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5ldyBYTUxEZWNsYXJhdGlvbih0aGlzLCB2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5kZWNsYXJhdGlvbihub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZG9jdHlwZSA9IGZ1bmN0aW9uKHJvb3QsIHB1YklELCBzeXNJRCkge1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgaWYgKHJvb3QgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHJvb3Qgbm9kZSBuYW1lLlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZHRkKCkgbXVzdCBjb21lIGJlZm9yZSB0aGUgcm9vdCBub2RlLlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE5vZGUgPSBuZXcgWE1MRG9jVHlwZSh0aGlzLCBwdWJJRCwgc3lzSUQpO1xuICAgICAgdGhpcy5jdXJyZW50Tm9kZS5yb290Tm9kZU5hbWUgPSByb290O1xuICAgICAgdGhpcy5jdXJyZW50Tm9kZS5jaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jdXJyZW50TGV2ZWwrKztcbiAgICAgIHRoaXMub3BlblRhZ3NbdGhpcy5jdXJyZW50TGV2ZWxdID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kdGRFbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxEVERFbGVtZW50KHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZEVsZW1lbnQobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmF0dExpc3QgPSBmdW5jdGlvbihlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MRFREQXR0TGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZEF0dExpc3Qobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVudGl0eSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MRFRERW50aXR5KHRoaXMsIGZhbHNlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5kdGRFbnRpdHkobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLnBFbnRpdHkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTERUREVudGl0eSh0aGlzLCB0cnVlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5kdGRFbnRpdHkobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLm5vdGF0aW9uID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxEVEROb3RhdGlvbih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5kdGROb3RhdGlvbihub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUudXAgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRMZXZlbCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGRvY3VtZW50IG5vZGUgaGFzIG5vIHBhcmVudC5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZSkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIHRoaXMuY2xvc2VOb2RlKHRoaXMuY3VycmVudE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3Blbk5vZGUodGhpcy5jdXJyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNsb3NlTm9kZSh0aGlzLm9wZW5UYWdzW3RoaXMuY3VycmVudExldmVsXSk7XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5vcGVuVGFnc1t0aGlzLmN1cnJlbnRMZXZlbF07XG4gICAgICB0aGlzLmN1cnJlbnRMZXZlbC0tO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgd2hpbGUgKHRoaXMuY3VycmVudExldmVsID49IDApIHtcbiAgICAgICAgdGhpcy51cCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub25FbmQoKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUub3BlbkN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudE5vZGUuY2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuTm9kZSh0aGlzLmN1cnJlbnROb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUub3Blbk5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgYXR0LCBjaHVuaywgbmFtZSwgcmVmMTtcbiAgICAgIGlmICghbm9kZS5pc09wZW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvb3QgJiYgdGhpcy5jdXJyZW50TGV2ZWwgPT09IDAgJiYgbm9kZS50eXBlID09PSBOb2RlVHlwZS5FbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5yb290ID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBjaHVuayA9ICcnO1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZS5FbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgICAgICBjaHVuayA9IHRoaXMud3JpdGVyLmluZGVudChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKSArICc8JyArIG5vZGUubmFtZTtcbiAgICAgICAgICByZWYxID0gbm9kZS5hdHRyaWJzO1xuICAgICAgICAgIGZvciAobmFtZSBpbiByZWYxKSB7XG4gICAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYxLCBuYW1lKSkgY29udGludWU7XG4gICAgICAgICAgICBhdHQgPSByZWYxW25hbWVdO1xuICAgICAgICAgICAgY2h1bmsgKz0gdGhpcy53cml0ZXIuYXR0cmlidXRlKGF0dCwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNodW5rICs9IChub2RlLmNoaWxkcmVuID8gJz4nIDogJy8+JykgKyB0aGlzLndyaXRlci5lbmRsaW5lKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpO1xuICAgICAgICAgIHRoaXMud3JpdGVyT3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndyaXRlck9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgICAgIGNodW5rID0gdGhpcy53cml0ZXIuaW5kZW50KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpICsgJzwhRE9DVFlQRSAnICsgbm9kZS5yb290Tm9kZU5hbWU7XG4gICAgICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICAgICAgY2h1bmsgKz0gJyBQVUJMSUMgXCInICsgbm9kZS5wdWJJRCArICdcIiBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuc3lzSUQpIHtcbiAgICAgICAgICAgIGNodW5rICs9ICcgU1lTVEVNIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY2h1bmsgKz0gJyBbJztcbiAgICAgICAgICAgIHRoaXMud3JpdGVyT3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgICAgICBjaHVuayArPSAnPic7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNodW5rICs9IHRoaXMud3JpdGVyLmVuZGxpbmUobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRhdGEoY2h1bmssIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuaXNPcGVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuY2xvc2VOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIGNodW5rO1xuICAgICAgaWYgKCFub2RlLmlzQ2xvc2VkKSB7XG4gICAgICAgIGNodW5rID0gJyc7XG4gICAgICAgIHRoaXMud3JpdGVyT3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZS5FbGVtZW50KSB7XG4gICAgICAgICAgY2h1bmsgPSB0aGlzLndyaXRlci5pbmRlbnQobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCkgKyAnPC8nICsgbm9kZS5uYW1lICsgJz4nICsgdGhpcy53cml0ZXIuZW5kbGluZShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaHVuayA9IHRoaXMud3JpdGVyLmluZGVudChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKSArICddPicgKyB0aGlzLndyaXRlci5lbmRsaW5lKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud3JpdGVyT3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICAgIHRoaXMub25EYXRhKGNodW5rLCB0aGlzLmN1cnJlbnRMZXZlbCk7XG4gICAgICAgIHJldHVybiBub2RlLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUub25EYXRhID0gZnVuY3Rpb24oY2h1bmssIGxldmVsKSB7XG4gICAgICB0aGlzLmRvY3VtZW50U3RhcnRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5vbkRhdGFDYWxsYmFjayhjaHVuaywgbGV2ZWwgKyAxKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUub25FbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMub25FbmRDYWxsYmFjaygpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kZWJ1Z0luZm8gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwibm9kZTogPFwiICsgbmFtZSArIFwiPlwiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5lbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubm9kID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUudHh0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kYXQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2RhdGEodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jb20gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tbWVudCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmlucyA9IGZ1bmN0aW9uKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9uKHRhcmdldCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kZWMgPSBmdW5jdGlvbih2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb24odmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kdGQgPSBmdW5jdGlvbihyb290LCBwdWJJRCwgc3lzSUQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3R5cGUocm9vdCwgcHViSUQsIHN5c0lEKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLm4gPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNkYXRhKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYXcodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5pID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmF0dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5vZGUgJiYgdGhpcy5jdXJyZW50Tm9kZS50eXBlID09PSBOb2RlVHlwZS5Eb2NUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dExpc3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5hID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZSAmJiB0aGlzLmN1cnJlbnROb2RlLnR5cGUgPT09IE5vZGVUeXBlLkRvY1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0TGlzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVudCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRpdHkobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5wZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBFbnRpdHkobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5ub3QgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90YXRpb24obmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRG9jdW1lbnRDQjtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxEdW1teSwgWE1MTm9kZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTER1bW15ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRHVtbXksIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRHVtbXkocGFyZW50KSB7XG4gICAgICBYTUxEdW1teS5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgdGhpcy50eXBlID0gTm9kZVR5cGUuRHVtbXk7XG4gICAgfVxuXG4gICAgWE1MRHVtbXkucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9O1xuXG4gICAgWE1MRHVtbXkucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRHVtbXk7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTEF0dHJpYnV0ZSwgWE1MRWxlbWVudCwgWE1MTmFtZWROb2RlTWFwLCBYTUxOb2RlLCBnZXRWYWx1ZSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIHJlZixcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIHJlZiA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLCBpc09iamVjdCA9IHJlZi5pc09iamVjdCwgaXNGdW5jdGlvbiA9IHJlZi5pc0Z1bmN0aW9uLCBnZXRWYWx1ZSA9IHJlZi5nZXRWYWx1ZTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MQXR0cmlidXRlID0gcmVxdWlyZSgnLi9YTUxBdHRyaWJ1dGUnKTtcblxuICBYTUxOYW1lZE5vZGVNYXAgPSByZXF1aXJlKCcuL1hNTE5hbWVkTm9kZU1hcCcpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRWxlbWVudCA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTEVsZW1lbnQsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRWxlbWVudChwYXJlbnQsIG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICAgIHZhciBjaGlsZCwgaiwgbGVuLCByZWYxO1xuICAgICAgWE1MRWxlbWVudC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGVsZW1lbnQgbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUobmFtZSk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5FbGVtZW50O1xuICAgICAgdGhpcy5hdHRyaWJzID0ge307XG4gICAgICB0aGlzLnNjaGVtYVR5cGVJbmZvID0gbnVsbDtcbiAgICAgIGlmIChhdHRyaWJ1dGVzICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGUoYXR0cmlidXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50LnR5cGUgPT09IE5vZGVUeXBlLkRvY3VtZW50KSB7XG4gICAgICAgIHRoaXMuaXNSb290ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudE9iamVjdCA9IHBhcmVudDtcbiAgICAgICAgcGFyZW50LnJvb3RPYmplY3QgPSB0aGlzO1xuICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgcmVmMSA9IHBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgICBjaGlsZCA9IHJlZjFbal07XG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRG9jVHlwZSkge1xuICAgICAgICAgICAgICBjaGlsZC5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRWxlbWVudC5wcm90b3R5cGUsICd0YWdOYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ25hbWVzcGFjZVVSSScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ3ByZWZpeCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ2xvY2FsTmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRWxlbWVudC5wcm90b3R5cGUsICdpZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ2NsYXNzTmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ2NsYXNzTGlzdCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ2F0dHJpYnV0ZXMnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuYXR0cmlidXRlTWFwIHx8ICF0aGlzLmF0dHJpYnV0ZU1hcC5ub2Rlcykge1xuICAgICAgICAgIHRoaXMuYXR0cmlidXRlTWFwID0gbmV3IFhNTE5hbWVkTm9kZU1hcCh0aGlzLmF0dHJpYnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZU1hcDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYXR0LCBhdHROYW1lLCBjbG9uZWRTZWxmLCByZWYxO1xuICAgICAgY2xvbmVkU2VsZiA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICBpZiAoY2xvbmVkU2VsZi5pc1Jvb3QpIHtcbiAgICAgICAgY2xvbmVkU2VsZi5kb2N1bWVudE9iamVjdCA9IG51bGw7XG4gICAgICB9XG4gICAgICBjbG9uZWRTZWxmLmF0dHJpYnMgPSB7fTtcbiAgICAgIHJlZjEgPSB0aGlzLmF0dHJpYnM7XG4gICAgICBmb3IgKGF0dE5hbWUgaW4gcmVmMSkge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYxLCBhdHROYW1lKSkgY29udGludWU7XG4gICAgICAgIGF0dCA9IHJlZjFbYXR0TmFtZV07XG4gICAgICAgIGNsb25lZFNlbGYuYXR0cmlic1thdHROYW1lXSA9IGF0dC5jbG9uZSgpO1xuICAgICAgfVxuICAgICAgY2xvbmVkU2VsZi5jaGlsZHJlbiA9IFtdO1xuICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHZhciBjbG9uZWRDaGlsZDtcbiAgICAgICAgY2xvbmVkQ2hpbGQgPSBjaGlsZC5jbG9uZSgpO1xuICAgICAgICBjbG9uZWRDaGlsZC5wYXJlbnQgPSBjbG9uZWRTZWxmO1xuICAgICAgICByZXR1cm4gY2xvbmVkU2VsZi5jaGlsZHJlbi5wdXNoKGNsb25lZENoaWxkKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNsb25lZFNlbGY7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgYXR0TmFtZSwgYXR0VmFsdWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdChuYW1lKSkge1xuICAgICAgICBmb3IgKGF0dE5hbWUgaW4gbmFtZSkge1xuICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG5hbWUsIGF0dE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgICBhdHRWYWx1ZSA9IG5hbWVbYXR0TmFtZV07XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGUoYXR0TmFtZSwgYXR0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZWVwTnVsbEF0dHJpYnV0ZXMgJiYgKHZhbHVlID09IG51bGwpKSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJzW25hbWVdID0gbmV3IFhNTEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCBcIlwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJzW25hbWVdID0gbmV3IFhNTEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgYXR0TmFtZSwgaiwgbGVuO1xuICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGF0dHJpYnV0ZSBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgbmFtZSA9IGdldFZhbHVlKG5hbWUpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yIChqID0gMCwgbGVuID0gbmFtZS5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGF0dE5hbWUgPSBuYW1lW2pdO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmF0dHJpYnNbYXR0TmFtZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmF0dHJpYnNbbmFtZV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5lbGVtZW50KHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmF0dCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5hID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIGlmICh0aGlzLmF0dHJpYnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlic1tuYW1lXS52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOb2RlID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgaWYgKHRoaXMuYXR0cmlicy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJzW25hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbihuZXdBdHRyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbihvbGRBdHRyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5vZGVOUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5vZGVOUyA9IGZ1bmN0aW9uKG5ld0F0dHIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dHJpYnMuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmhhc0F0dHJpYnV0ZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuc2V0SWRBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lLCBpc0lkKSB7XG4gICAgICBpZiAodGhpcy5hdHRyaWJzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnNbbmFtZV0uaXNJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc0lkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5zZXRJZEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIGlzSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuc2V0SWRBdHRyaWJ1dGVOb2RlID0gZnVuY3Rpb24oaWRBdHRyLCBpc0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24odGFnbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9uKGNsYXNzTmFtZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuaXNFcXVhbE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgaSwgaiwgcmVmMTtcbiAgICAgIGlmICghWE1MRWxlbWVudC5fX3N1cGVyX18uaXNFcXVhbE5vZGUuYXBwbHkodGhpcywgYXJndW1lbnRzKS5pc0VxdWFsTm9kZShub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5uYW1lc3BhY2VVUkkgIT09IHRoaXMubmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnByZWZpeCAhPT0gdGhpcy5wcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubG9jYWxOYW1lICE9PSB0aGlzLmxvY2FsTmFtZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5hdHRyaWJzLmxlbmd0aCAhPT0gdGhpcy5hdHRyaWJzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSBqID0gMCwgcmVmMSA9IHRoaXMuYXR0cmlicy5sZW5ndGggLSAxOyAwIDw9IHJlZjEgPyBqIDw9IHJlZjEgOiBqID49IHJlZjE7IGkgPSAwIDw9IHJlZjEgPyArK2ogOiAtLWopIHtcbiAgICAgICAgaWYgKCF0aGlzLmF0dHJpYnNbaV0uaXNFcXVhbE5vZGUobm9kZS5hdHRyaWJzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxFbGVtZW50O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTE5hbWVkTm9kZU1hcDtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTE5hbWVkTm9kZU1hcCA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxOYW1lZE5vZGVNYXAobm9kZXMpIHtcbiAgICAgIHRoaXMubm9kZXMgPSBub2RlcztcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm5vZGVzKS5sZW5ndGggfHwgMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTE5hbWVkTm9kZU1hcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW0gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2Rlc1tuYW1lXTtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5zZXROYW1lZEl0ZW0gPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgb2xkTm9kZTtcbiAgICAgIG9sZE5vZGUgPSB0aGlzLm5vZGVzW25vZGUubm9kZU5hbWVdO1xuICAgICAgdGhpcy5ub2Rlc1tub2RlLm5vZGVOYW1lXSA9IG5vZGU7XG4gICAgICByZXR1cm4gb2xkTm9kZSB8fCBudWxsO1xuICAgIH07XG5cbiAgICBYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLnJlbW92ZU5hbWVkSXRlbSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBvbGROb2RlO1xuICAgICAgb2xkTm9kZSA9IHRoaXMubm9kZXNbbmFtZV07XG4gICAgICBkZWxldGUgdGhpcy5ub2Rlc1tuYW1lXTtcbiAgICAgIHJldHVybiBvbGROb2RlIHx8IG51bGw7XG4gICAgfTtcblxuICAgIFhNTE5hbWVkTm9kZU1hcC5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2Rlc1tPYmplY3Qua2V5cyh0aGlzLm5vZGVzKVtpbmRleF1dIHx8IG51bGw7XG4gICAgfTtcblxuICAgIFhNTE5hbWVkTm9kZU1hcC5wcm90b3R5cGUuZ2V0TmFtZWRJdGVtTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfTtcblxuICAgIFhNTE5hbWVkTm9kZU1hcC5wcm90b3R5cGUuc2V0TmFtZWRJdGVtTlMgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5yZW1vdmVOYW1lZEl0ZW1OUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTE5hbWVkTm9kZU1hcDtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIERvY3VtZW50UG9zaXRpb24sIE5vZGVUeXBlLCBYTUxDRGF0YSwgWE1MQ29tbWVudCwgWE1MRGVjbGFyYXRpb24sIFhNTERvY1R5cGUsIFhNTER1bW15LCBYTUxFbGVtZW50LCBYTUxOYW1lZE5vZGVNYXAsIFhNTE5vZGUsIFhNTE5vZGVMaXN0LCBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIFhNTFJhdywgWE1MVGV4dCwgZ2V0VmFsdWUsIGlzRW1wdHksIGlzRnVuY3Rpb24sIGlzT2JqZWN0LCByZWYxLFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICByZWYxID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGlzT2JqZWN0ID0gcmVmMS5pc09iamVjdCwgaXNGdW5jdGlvbiA9IHJlZjEuaXNGdW5jdGlvbiwgaXNFbXB0eSA9IHJlZjEuaXNFbXB0eSwgZ2V0VmFsdWUgPSByZWYxLmdldFZhbHVlO1xuXG4gIFhNTEVsZW1lbnQgPSBudWxsO1xuXG4gIFhNTENEYXRhID0gbnVsbDtcblxuICBYTUxDb21tZW50ID0gbnVsbDtcblxuICBYTUxEZWNsYXJhdGlvbiA9IG51bGw7XG5cbiAgWE1MRG9jVHlwZSA9IG51bGw7XG5cbiAgWE1MUmF3ID0gbnVsbDtcblxuICBYTUxUZXh0ID0gbnVsbDtcblxuICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBudWxsO1xuXG4gIFhNTER1bW15ID0gbnVsbDtcblxuICBOb2RlVHlwZSA9IG51bGw7XG5cbiAgWE1MTm9kZUxpc3QgPSBudWxsO1xuXG4gIFhNTE5hbWVkTm9kZU1hcCA9IG51bGw7XG5cbiAgRG9jdW1lbnRQb3NpdGlvbiA9IG51bGw7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxOb2RlID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTE5vZGUocGFyZW50MSkge1xuICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQxO1xuICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucGFyZW50Lm9wdGlvbnM7XG4gICAgICAgIHRoaXMuc3RyaW5naWZ5ID0gdGhpcy5wYXJlbnQuc3RyaW5naWZ5O1xuICAgICAgfVxuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICB0aGlzLmJhc2VVUkkgPSBudWxsO1xuICAgICAgaWYgKCFYTUxFbGVtZW50KSB7XG4gICAgICAgIFhNTEVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTEVsZW1lbnQnKTtcbiAgICAgICAgWE1MQ0RhdGEgPSByZXF1aXJlKCcuL1hNTENEYXRhJyk7XG4gICAgICAgIFhNTENvbW1lbnQgPSByZXF1aXJlKCcuL1hNTENvbW1lbnQnKTtcbiAgICAgICAgWE1MRGVjbGFyYXRpb24gPSByZXF1aXJlKCcuL1hNTERlY2xhcmF0aW9uJyk7XG4gICAgICAgIFhNTERvY1R5cGUgPSByZXF1aXJlKCcuL1hNTERvY1R5cGUnKTtcbiAgICAgICAgWE1MUmF3ID0gcmVxdWlyZSgnLi9YTUxSYXcnKTtcbiAgICAgICAgWE1MVGV4dCA9IHJlcXVpcmUoJy4vWE1MVGV4dCcpO1xuICAgICAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSByZXF1aXJlKCcuL1hNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbicpO1xuICAgICAgICBYTUxEdW1teSA9IHJlcXVpcmUoJy4vWE1MRHVtbXknKTtcbiAgICAgICAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG4gICAgICAgIFhNTE5vZGVMaXN0ID0gcmVxdWlyZSgnLi9YTUxOb2RlTGlzdCcpO1xuICAgICAgICBYTUxOYW1lZE5vZGVNYXAgPSByZXF1aXJlKCcuL1hNTE5hbWVkTm9kZU1hcCcpO1xuICAgICAgICBEb2N1bWVudFBvc2l0aW9uID0gcmVxdWlyZSgnLi9Eb2N1bWVudFBvc2l0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAnbm9kZU5hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAnbm9kZVR5cGUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAnbm9kZVZhbHVlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdwYXJlbnROb2RlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAnY2hpbGROb2RlcycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGlsZE5vZGVMaXN0IHx8ICF0aGlzLmNoaWxkTm9kZUxpc3Qubm9kZXMpIHtcbiAgICAgICAgICB0aGlzLmNoaWxkTm9kZUxpc3QgPSBuZXcgWE1MTm9kZUxpc3QodGhpcy5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlTGlzdDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOb2RlLnByb3RvdHlwZSwgJ2ZpcnN0Q2hpbGQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXSB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAnbGFzdENoaWxkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAncHJldmlvdXNTaWJsaW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2hpbGRyZW5baSAtIDFdIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICduZXh0U2libGluZycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpO1xuICAgICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNoaWxkcmVuW2kgKyAxXSB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAnb3duZXJEb2N1bWVudCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50KCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOb2RlLnByb3RvdHlwZSwgJ3RleHRDb250ZW50Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoaWxkLCBqLCBsZW4sIHJlZjIsIHN0cjtcbiAgICAgICAgaWYgKHRoaXMubm9kZVR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQgfHwgdGhpcy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIHN0ciA9ICcnO1xuICAgICAgICAgIHJlZjIgPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjIubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGNoaWxkID0gcmVmMltqXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC50ZXh0Q29udGVudCkge1xuICAgICAgICAgICAgICBzdHIgKz0gY2hpbGQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnNldFBhcmVudCA9IGZ1bmN0aW9uKHBhcmVudCkge1xuICAgICAgdmFyIGNoaWxkLCBqLCBsZW4sIHJlZjIsIHJlc3VsdHM7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gcGFyZW50Lm9wdGlvbnM7XG4gICAgICAgIHRoaXMuc3RyaW5naWZ5ID0gcGFyZW50LnN0cmluZ2lmeTtcbiAgICAgIH1cbiAgICAgIHJlZjIgPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBjaGlsZCA9IHJlZjJbal07XG4gICAgICAgIHJlc3VsdHMucHVzaChjaGlsZC5zZXRQYXJlbnQodGhpcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmVsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICB2YXIgY2hpbGROb2RlLCBpdGVtLCBqLCBrLCBrZXksIGxhc3RDaGlsZCwgbGVuLCBsZW4xLCByZWYyLCByZWYzLCB2YWw7XG4gICAgICBsYXN0Q2hpbGQgPSBudWxsO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMgPT09IG51bGwgJiYgKHRleHQgPT0gbnVsbCkpIHtcbiAgICAgICAgcmVmMiA9IFt7fSwgbnVsbF0sIGF0dHJpYnV0ZXMgPSByZWYyWzBdLCB0ZXh0ID0gcmVmMlsxXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyaWJ1dGVzID09IG51bGwpIHtcbiAgICAgICAgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgfVxuICAgICAgYXR0cmlidXRlcyA9IGdldFZhbHVlKGF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKCFpc09iamVjdChhdHRyaWJ1dGVzKSkge1xuICAgICAgICByZWYzID0gW2F0dHJpYnV0ZXMsIHRleHRdLCB0ZXh0ID0gcmVmM1swXSwgYXR0cmlidXRlcyA9IHJlZjNbMV07XG4gICAgICB9XG4gICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IG5hbWUubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBpdGVtID0gbmFtZVtqXTtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihuYW1lKSkge1xuICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQobmFtZS5hcHBseSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gbmFtZSkge1xuICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG5hbWUsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgIHZhbCA9IG5hbWVba2V5XTtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuYXBwbHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRGVjb3JhdG9ycyAmJiB0aGlzLnN0cmluZ2lmeS5jb252ZXJ0QXR0S2V5ICYmIGtleS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRBdHRLZXkpID09PSAwKSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmF0dHJpYnV0ZShrZXkuc3Vic3RyKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRBdHRLZXkubGVuZ3RoKSwgdmFsKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuc2VwYXJhdGVBcnJheUl0ZW1zICYmIEFycmF5LmlzQXJyYXkodmFsKSAmJiBpc0VtcHR5KHZhbCkpIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZHVtbXkoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkgJiYgaXNFbXB0eSh2YWwpKSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQoa2V5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMua2VlcE51bGxOb2RlcyAmJiAodmFsID09IG51bGwpKSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmR1bW15KCk7XG4gICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLnNlcGFyYXRlQXJyYXlJdGVtcyAmJiBBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIGZvciAoayA9IDAsIGxlbjEgPSB2YWwubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgICAgICAgIGl0ZW0gPSB2YWxba107XG4gICAgICAgICAgICAgIGNoaWxkTm9kZSA9IHt9O1xuICAgICAgICAgICAgICBjaGlsZE5vZGVba2V5XSA9IGl0ZW07XG4gICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChjaGlsZE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRGVjb3JhdG9ycyAmJiB0aGlzLnN0cmluZ2lmeS5jb252ZXJ0VGV4dEtleSAmJiBrZXkuaW5kZXhPZih0aGlzLnN0cmluZ2lmeS5jb252ZXJ0VGV4dEtleSkgPT09IDApIHtcbiAgICAgICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5lbGVtZW50KHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQoa2V5KTtcbiAgICAgICAgICAgICAgbGFzdENoaWxkLmVsZW1lbnQodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5lbGVtZW50KGtleSwgdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5rZWVwTnVsbE5vZGVzICYmIHRleHQgPT09IG51bGwpIHtcbiAgICAgICAgbGFzdENoaWxkID0gdGhpcy5kdW1teSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRGVjb3JhdG9ycyAmJiB0aGlzLnN0cmluZ2lmeS5jb252ZXJ0VGV4dEtleSAmJiBuYW1lLmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydFRleHRLZXkpID09PSAwKSB7XG4gICAgICAgICAgbGFzdENoaWxkID0gdGhpcy50ZXh0KHRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRGVjb3JhdG9ycyAmJiB0aGlzLnN0cmluZ2lmeS5jb252ZXJ0Q0RhdGFLZXkgJiYgbmFtZS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRDRGF0YUtleSkgPT09IDApIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmNkYXRhKHRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRGVjb3JhdG9ycyAmJiB0aGlzLnN0cmluZ2lmeS5jb252ZXJ0Q29tbWVudEtleSAmJiBuYW1lLmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydENvbW1lbnRLZXkpID09PSAwKSB7XG4gICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5jb21tZW50KHRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRGVjb3JhdG9ycyAmJiB0aGlzLnN0cmluZ2lmeS5jb252ZXJ0UmF3S2V5ICYmIG5hbWUuaW5kZXhPZih0aGlzLnN0cmluZ2lmeS5jb252ZXJ0UmF3S2V5KSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMucmF3KHRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRGVjb3JhdG9ycyAmJiB0aGlzLnN0cmluZ2lmeS5jb252ZXJ0UElLZXkgJiYgbmFtZS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRQSUtleSkgPT09IDApIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmluc3RydWN0aW9uKG5hbWUuc3Vic3RyKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRQSUtleS5sZW5ndGgpLCB0ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLm5vZGUobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsYXN0Q2hpbGQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgY3JlYXRlIGFueSBlbGVtZW50cyB3aXRoOiBcIiArIG5hbWUgKyBcIi4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsYXN0Q2hpbGQ7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgbmV3Q2hpbGQsIHJlZkNoaWxkLCByZW1vdmVkO1xuICAgICAgaWYgKG5hbWUgIT0gbnVsbCA/IG5hbWUudHlwZSA6IHZvaWQgMCkge1xuICAgICAgICBuZXdDaGlsZCA9IG5hbWU7XG4gICAgICAgIHJlZkNoaWxkID0gYXR0cmlidXRlcztcbiAgICAgICAgbmV3Q2hpbGQuc2V0UGFyZW50KHRoaXMpO1xuICAgICAgICBpZiAocmVmQ2hpbGQpIHtcbiAgICAgICAgICBpID0gY2hpbGRyZW4uaW5kZXhPZihyZWZDaGlsZCk7XG4gICAgICAgICAgcmVtb3ZlZCA9IGNoaWxkcmVuLnNwbGljZShpKTtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKG5ld0NoaWxkKTtcbiAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShjaGlsZHJlbiwgcmVtb3ZlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0NoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGluc2VydCBlbGVtZW50cyBhdCByb290IGxldmVsLiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgICAgcmVtb3ZlZCA9IHRoaXMucGFyZW50LmNoaWxkcmVuLnNwbGljZShpKTtcbiAgICAgICAgY2hpbGQgPSB0aGlzLnBhcmVudC5lbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgcmVtb3ZlZCk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpZiAodGhpcy5pc1Jvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGluc2VydCBlbGVtZW50cyBhdCByb290IGxldmVsLiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgcmVtb3ZlZCA9IHRoaXMucGFyZW50LmNoaWxkcmVuLnNwbGljZShpICsgMSk7XG4gICAgICBjaGlsZCA9IHRoaXMucGFyZW50LmVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgcmVtb3ZlZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIHJlZjI7XG4gICAgICBpZiAodGhpcy5pc1Jvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHJlbW92ZSB0aGUgcm9vdCBlbGVtZW50LiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICBbXS5zcGxpY2UuYXBwbHkodGhpcy5wYXJlbnQuY2hpbGRyZW4sIFtpLCBpIC0gaSArIDFdLmNvbmNhdChyZWYyID0gW10pKSwgcmVmMjtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUubm9kZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciBjaGlsZCwgcmVmMjtcbiAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcbiAgICAgICAgbmFtZSA9IGdldFZhbHVlKG5hbWUpO1xuICAgICAgfVxuICAgICAgYXR0cmlidXRlcyB8fCAoYXR0cmlidXRlcyA9IHt9KTtcbiAgICAgIGF0dHJpYnV0ZXMgPSBnZXRWYWx1ZShhdHRyaWJ1dGVzKTtcbiAgICAgIGlmICghaXNPYmplY3QoYXR0cmlidXRlcykpIHtcbiAgICAgICAgcmVmMiA9IFthdHRyaWJ1dGVzLCB0ZXh0XSwgdGV4dCA9IHJlZjJbMF0sIGF0dHJpYnV0ZXMgPSByZWYyWzFdO1xuICAgICAgfVxuICAgICAgY2hpbGQgPSBuZXcgWE1MRWxlbWVudCh0aGlzLCBuYW1lLCBhdHRyaWJ1dGVzKTtcbiAgICAgIGlmICh0ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgY2hpbGQudGV4dCh0ZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQodmFsdWUpO1xuICAgICAgfVxuICAgICAgY2hpbGQgPSBuZXcgWE1MVGV4dCh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNkYXRhID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTENEYXRhKHRoaXMsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY29tbWVudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxDb21tZW50KHRoaXMsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY29tbWVudEJlZm9yZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSk7XG4gICAgICBjaGlsZCA9IHRoaXMucGFyZW50LmNvbW1lbnQodmFsdWUpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5wYXJlbnQuY2hpbGRyZW4sIHJlbW92ZWQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNvbW1lbnRBZnRlciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSArIDEpO1xuICAgICAgY2hpbGQgPSB0aGlzLnBhcmVudC5jb21tZW50KHZhbHVlKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5yYXcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MUmF3KHRoaXMsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZHVtbXkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTER1bW15KHRoaXMpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pbnN0cnVjdGlvbiA9IGZ1bmN0aW9uKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgIHZhciBpbnNUYXJnZXQsIGluc1ZhbHVlLCBpbnN0cnVjdGlvbiwgaiwgbGVuO1xuICAgICAgaWYgKHRhcmdldCAhPSBudWxsKSB7XG4gICAgICAgIHRhcmdldCA9IGdldFZhbHVlKHRhcmdldCk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IGdldFZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgZm9yIChqID0gMCwgbGVuID0gdGFyZ2V0Lmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgaW5zVGFyZ2V0ID0gdGFyZ2V0W2pdO1xuICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb24oaW5zVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh0YXJnZXQpKSB7XG4gICAgICAgIGZvciAoaW5zVGFyZ2V0IGluIHRhcmdldCkge1xuICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHRhcmdldCwgaW5zVGFyZ2V0KSkgY29udGludWU7XG4gICAgICAgICAgaW5zVmFsdWUgPSB0YXJnZXRbaW5zVGFyZ2V0XTtcbiAgICAgICAgICB0aGlzLmluc3RydWN0aW9uKGluc1RhcmdldCwgaW5zVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXcgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMsIHRhcmdldCwgdmFsdWUpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goaW5zdHJ1Y3Rpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc3RydWN0aW9uQmVmb3JlID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkLCBpLCByZW1vdmVkO1xuICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICByZW1vdmVkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGkpO1xuICAgICAgY2hpbGQgPSB0aGlzLnBhcmVudC5pbnN0cnVjdGlvbih0YXJnZXQsIHZhbHVlKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pbnN0cnVjdGlvbkFmdGVyID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkLCBpLCByZW1vdmVkO1xuICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICByZW1vdmVkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGkgKyAxKTtcbiAgICAgIGNoaWxkID0gdGhpcy5wYXJlbnQuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgcmVtb3ZlZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZGVjbGFyYXRpb24gPSBmdW5jdGlvbih2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSkge1xuICAgICAgdmFyIGRvYywgeG1sZGVjO1xuICAgICAgZG9jID0gdGhpcy5kb2N1bWVudCgpO1xuICAgICAgeG1sZGVjID0gbmV3IFhNTERlY2xhcmF0aW9uKGRvYywgdmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUpO1xuICAgICAgaWYgKGRvYy5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZG9jLmNoaWxkcmVuLnVuc2hpZnQoeG1sZGVjKTtcbiAgICAgIH0gZWxzZSBpZiAoZG9jLmNoaWxkcmVuWzBdLnR5cGUgPT09IE5vZGVUeXBlLkRlY2xhcmF0aW9uKSB7XG4gICAgICAgIGRvYy5jaGlsZHJlblswXSA9IHhtbGRlYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvYy5jaGlsZHJlbi51bnNoaWZ0KHhtbGRlYyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9jLnJvb3QoKSB8fCBkb2M7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmR0ZCA9IGZ1bmN0aW9uKHB1YklELCBzeXNJRCkge1xuICAgICAgdmFyIGNoaWxkLCBkb2MsIGRvY3R5cGUsIGksIGosIGssIGxlbiwgbGVuMSwgcmVmMiwgcmVmMztcbiAgICAgIGRvYyA9IHRoaXMuZG9jdW1lbnQoKTtcbiAgICAgIGRvY3R5cGUgPSBuZXcgWE1MRG9jVHlwZShkb2MsIHB1YklELCBzeXNJRCk7XG4gICAgICByZWYyID0gZG9jLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gaiA9IDAsIGxlbiA9IHJlZjIubGVuZ3RoOyBqIDwgbGVuOyBpID0gKytqKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMltpXTtcbiAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLkRvY1R5cGUpIHtcbiAgICAgICAgICBkb2MuY2hpbGRyZW5baV0gPSBkb2N0eXBlO1xuICAgICAgICAgIHJldHVybiBkb2N0eXBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWYzID0gZG9jLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gayA9IDAsIGxlbjEgPSByZWYzLmxlbmd0aDsgayA8IGxlbjE7IGkgPSArK2spIHtcbiAgICAgICAgY2hpbGQgPSByZWYzW2ldO1xuICAgICAgICBpZiAoY2hpbGQuaXNSb290KSB7XG4gICAgICAgICAgZG9jLmNoaWxkcmVuLnNwbGljZShpLCAwLCBkb2N0eXBlKTtcbiAgICAgICAgICByZXR1cm4gZG9jdHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZG9jLmNoaWxkcmVuLnB1c2goZG9jdHlwZSk7XG4gICAgICByZXR1cm4gZG9jdHlwZTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudXAgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcm9vdCBub2RlIGhhcyBubyBwYXJlbnQuIFVzZSBkb2MoKSBpZiB5b3UgbmVlZCB0byBnZXQgdGhlIGRvY3VtZW50IG9iamVjdC5cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnJvb3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgbm9kZSA9IHRoaXM7XG4gICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZS5Eb2N1bWVudCkge1xuICAgICAgICAgIHJldHVybiBub2RlLnJvb3RPYmplY3Q7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5pc1Jvb3QpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZG9jdW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgbm9kZSA9IHRoaXM7XG4gICAgICB3aGlsZSAobm9kZSkge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZS5Eb2N1bWVudCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudCgpLmVuZChvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGk7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIGlmIChpIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbHJlYWR5IGF0IHRoZSBmaXJzdCBub2RlLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNoaWxkcmVuW2kgLSAxXTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGk7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIGlmIChpID09PSAtMSB8fCBpID09PSB0aGlzLnBhcmVudC5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFscmVhZHkgYXQgdGhlIGxhc3Qgbm9kZS4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jaGlsZHJlbltpICsgMV07XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmltcG9ydERvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICB2YXIgY2xvbmVkUm9vdDtcbiAgICAgIGNsb25lZFJvb3QgPSBkb2Mucm9vdCgpLmNsb25lKCk7XG4gICAgICBjbG9uZWRSb290LnBhcmVudCA9IHRoaXM7XG4gICAgICBjbG9uZWRSb290LmlzUm9vdCA9IGZhbHNlO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNsb25lZFJvb3QpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRlYnVnSW5mbyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciByZWYyLCByZWYzO1xuICAgICAgbmFtZSA9IG5hbWUgfHwgdGhpcy5uYW1lO1xuICAgICAgaWYgKChuYW1lID09IG51bGwpICYmICEoKHJlZjIgPSB0aGlzLnBhcmVudCkgIT0gbnVsbCA/IHJlZjIubmFtZSA6IHZvaWQgMCkpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJwYXJlbnQ6IDxcIiArIHRoaXMucGFyZW50Lm5hbWUgKyBcIj5cIjtcbiAgICAgIH0gZWxzZSBpZiAoISgocmVmMyA9IHRoaXMucGFyZW50KSAhPSBudWxsID8gcmVmMy5uYW1lIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gXCJub2RlOiA8XCIgKyBuYW1lICsgXCI+XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJub2RlOiA8XCIgKyBuYW1lICsgXCI+LCBwYXJlbnQ6IDxcIiArIHRoaXMucGFyZW50Lm5hbWUgKyBcIj5cIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZWxlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUubm9kID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudHh0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kYXQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2RhdGEodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jb20gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tbWVudCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlucyA9IGZ1bmN0aW9uKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9uKHRhcmdldCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kb2MgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50KCk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRlYyA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbih2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5uID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZGF0YSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmMgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tbWVudCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnIgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmF3KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaSA9IGZ1bmN0aW9uKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9uKHRhcmdldCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS51ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy51cCgpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pbXBvcnRYTUxCdWlsZGVyID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbXBvcnREb2N1bWVudChkb2MpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgPSBmdW5jdGlvbihuZXdDaGlsZCwgb2xkQ2hpbGQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbihvbGRDaGlsZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uKG5ld0NoaWxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmhhc0NoaWxkTm9kZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCAhPT0gMDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlID0gZnVuY3Rpb24oZGVlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5ub3JtYWxpemUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbihmZWF0dXJlLCB2ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaGFzQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlicy5sZW5ndGggIT09IDA7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgIHZhciByZWYsIHJlcztcbiAgICAgIHJlZiA9IHRoaXM7XG4gICAgICBpZiAocmVmID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudCgpICE9PSBvdGhlci5kb2N1bWVudCgpKSB7XG4gICAgICAgIHJlcyA9IERvY3VtZW50UG9zaXRpb24uRGlzY29ubmVjdGVkIHwgRG9jdW1lbnRQb3NpdGlvbi5JbXBsZW1lbnRhdGlvblNwZWNpZmljO1xuICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8IDAuNSkge1xuICAgICAgICAgIHJlcyB8PSBEb2N1bWVudFBvc2l0aW9uLlByZWNlZGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMgfD0gRG9jdW1lbnRQb3NpdGlvbi5Gb2xsb3dpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0gZWxzZSBpZiAocmVmLmlzQW5jZXN0b3Iob3RoZXIpKSB7XG4gICAgICAgIHJldHVybiBEb2N1bWVudFBvc2l0aW9uLkNvbnRhaW5zIHwgRG9jdW1lbnRQb3NpdGlvbi5QcmVjZWRpbmc7XG4gICAgICB9IGVsc2UgaWYgKHJlZi5pc0Rlc2NlbmRhbnQob3RoZXIpKSB7XG4gICAgICAgIHJldHVybiBEb2N1bWVudFBvc2l0aW9uLkNvbnRhaW5zIHwgRG9jdW1lbnRQb3NpdGlvbi5Gb2xsb3dpbmc7XG4gICAgICB9IGVsc2UgaWYgKHJlZi5pc1ByZWNlZGluZyhvdGhlcikpIHtcbiAgICAgICAgcmV0dXJuIERvY3VtZW50UG9zaXRpb24uUHJlY2VkaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIERvY3VtZW50UG9zaXRpb24uRm9sbG93aW5nO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc1NhbWVOb2RlID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUubG9va3VwUHJlZml4ID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlzRGVmYXVsdE5hbWVzcGFjZSA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5sb29rdXBOYW1lc3BhY2VVUkkgPSBmdW5jdGlvbihwcmVmaXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaXNFcXVhbE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgaSwgaiwgcmVmMjtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSB0aGlzLm5vZGVUeXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCAhPT0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gaiA9IDAsIHJlZjIgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDE7IDAgPD0gcmVmMiA/IGogPD0gcmVmMiA6IGogPj0gcmVmMjsgaSA9IDAgPD0gcmVmMiA/ICsraiA6IC0taikge1xuICAgICAgICBpZiAoIXRoaXMuY2hpbGRyZW5baV0uaXNFcXVhbE5vZGUobm9kZS5jaGlsZHJlbltpXSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5nZXRGZWF0dXJlID0gZnVuY3Rpb24oZmVhdHVyZSwgdmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5zZXRVc2VyRGF0YSA9IGZ1bmN0aW9uKGtleSwgZGF0YSwgaGFuZGxlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5nZXRVc2VyRGF0YSA9IGZ1bmN0aW9uKGtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICBpZiAoIW90aGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdGhlciA9PT0gdGhpcyB8fCB0aGlzLmlzRGVzY2VuZGFudChvdGhlcik7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlzRGVzY2VuZGFudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBjaGlsZCwgaXNEZXNjZW5kYW50Q2hpbGQsIGosIGxlbiwgcmVmMjtcbiAgICAgIHJlZjIgPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBjaGlsZCA9IHJlZjJbal07XG4gICAgICAgIGlmIChub2RlID09PSBjaGlsZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlzRGVzY2VuZGFudENoaWxkID0gY2hpbGQuaXNEZXNjZW5kYW50KG5vZGUpO1xuICAgICAgICBpZiAoaXNEZXNjZW5kYW50Q2hpbGQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc0FuY2VzdG9yID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuaXNEZXNjZW5kYW50KHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc1ByZWNlZGluZyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBub2RlUG9zLCB0aGlzUG9zO1xuICAgICAgbm9kZVBvcyA9IHRoaXMudHJlZVBvc2l0aW9uKG5vZGUpO1xuICAgICAgdGhpc1BvcyA9IHRoaXMudHJlZVBvc2l0aW9uKHRoaXMpO1xuICAgICAgaWYgKG5vZGVQb3MgPT09IC0xIHx8IHRoaXNQb3MgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlUG9zIDwgdGhpc1BvcztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaXNGb2xsb3dpbmcgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgbm9kZVBvcywgdGhpc1BvcztcbiAgICAgIG5vZGVQb3MgPSB0aGlzLnRyZWVQb3NpdGlvbihub2RlKTtcbiAgICAgIHRoaXNQb3MgPSB0aGlzLnRyZWVQb3NpdGlvbih0aGlzKTtcbiAgICAgIGlmIChub2RlUG9zID09PSAtMSB8fCB0aGlzUG9zID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbm9kZVBvcyA+IHRoaXNQb3M7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnRyZWVQb3NpdGlvbiA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBmb3VuZCwgcG9zO1xuICAgICAgcG9zID0gMDtcbiAgICAgIGZvdW5kID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcmVhY2hUcmVlTm9kZSh0aGlzLmRvY3VtZW50KCksIGZ1bmN0aW9uKGNoaWxkTm9kZSkge1xuICAgICAgICBwb3MrKztcbiAgICAgICAgaWYgKCFmb3VuZCAmJiBjaGlsZE5vZGUgPT09IG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5mb3JlYWNoVHJlZU5vZGUgPSBmdW5jdGlvbihub2RlLCBmdW5jKSB7XG4gICAgICB2YXIgY2hpbGQsIGosIGxlbiwgcmVmMiwgcmVzO1xuICAgICAgbm9kZSB8fCAobm9kZSA9IHRoaXMuZG9jdW1lbnQoKSk7XG4gICAgICByZWYyID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjIubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgY2hpbGQgPSByZWYyW2pdO1xuICAgICAgICBpZiAocmVzID0gZnVuYyhjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcyA9IHRoaXMuZm9yZWFjaFRyZWVOb2RlKGNoaWxkLCBmdW5jKTtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gWE1MTm9kZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTE5vZGVMaXN0O1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MTm9kZUxpc3QgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MTm9kZUxpc3Qobm9kZXMpIHtcbiAgICAgIHRoaXMubm9kZXMgPSBub2RlcztcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZUxpc3QucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMubGVuZ3RoIHx8IDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxOb2RlTGlzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzID0gbnVsbDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZUxpc3QucHJvdG90eXBlLml0ZW0gPSBmdW5jdGlvbihpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXNbaW5kZXhdIHx8IG51bGw7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxOb2RlTGlzdDtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxDaGFyYWN0ZXJEYXRhLCBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxDaGFyYWN0ZXJEYXRhID0gcmVxdWlyZSgnLi9YTUxDaGFyYWN0ZXJEYXRhJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uKHBhcmVudCwgdGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBpbnN0cnVjdGlvbiB0YXJnZXQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247XG4gICAgICB0aGlzLnRhcmdldCA9IHRoaXMuc3RyaW5naWZ5Lmluc1RhcmdldCh0YXJnZXQpO1xuICAgICAgdGhpcy5uYW1lID0gdGhpcy50YXJnZXQ7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5Lmluc1ZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9O1xuXG4gICAgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmlzRXF1YWxOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKCFYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uX19zdXBlcl9fLmlzRXF1YWxOb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykuaXNFcXVhbE5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUudGFyZ2V0ICE9PSB0aGlzLnRhcmdldCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbjtcblxuICB9KShYTUxDaGFyYWN0ZXJEYXRhKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MTm9kZSwgWE1MUmF3LFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MUmF3ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MUmF3LCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTFJhdyhwYXJlbnQsIHRleHQpIHtcbiAgICAgIFhNTFJhdy5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHJhdyB0ZXh0LiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy50eXBlID0gTm9kZVR5cGUuUmF3O1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5LnJhdyh0ZXh0KTtcbiAgICB9XG5cbiAgICBYTUxSYXcucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9O1xuXG4gICAgWE1MUmF3LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnJhdyh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MUmF3O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBXcml0ZXJTdGF0ZSwgWE1MU3RyZWFtV3JpdGVyLCBYTUxXcml0ZXJCYXNlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MV3JpdGVyQmFzZSA9IHJlcXVpcmUoJy4vWE1MV3JpdGVyQmFzZScpO1xuXG4gIFdyaXRlclN0YXRlID0gcmVxdWlyZSgnLi9Xcml0ZXJTdGF0ZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MU3RyZWFtV3JpdGVyID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MU3RyZWFtV3JpdGVyLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTFN0cmVhbVdyaXRlcihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZW5kbGluZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICBpZiAobm9kZS5pc0xhc3RSb290Tm9kZSAmJiBvcHRpb25zLnN0YXRlID09PSBXcml0ZXJTdGF0ZS5DbG9zZVRhZykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5lbmRsaW5lLmNhbGwodGhpcywgbm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmRvY3VtZW50ID0gZnVuY3Rpb24oZG9jLCBvcHRpb25zKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIGosIGssIGxlbiwgbGVuMSwgcmVmLCByZWYxLCByZXN1bHRzO1xuICAgICAgcmVmID0gZG9jLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcbiAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgIGNoaWxkLmlzTGFzdFJvb3ROb2RlID0gaSA9PT0gZG9jLmNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gdGhpcy5maWx0ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgcmVmMSA9IGRvYy5jaGlsZHJlbjtcbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgIGZvciAoayA9IDAsIGxlbjEgPSByZWYxLmxlbmd0aDsgayA8IGxlbjE7IGsrKykge1xuICAgICAgICBjaGlsZCA9IHJlZjFba107XG4gICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLndyaXRlQ2hpbGROb2RlKGNoaWxkLCBvcHRpb25zLCAwKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5hdHRyaWJ1dGUgPSBmdW5jdGlvbihhdHQsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5hdHRyaWJ1dGUuY2FsbCh0aGlzLCBhdHQsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuY2RhdGEgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKFhNTFN0cmVhbVdyaXRlci5fX3N1cGVyX18uY2RhdGEuY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKFhNTFN0cmVhbVdyaXRlci5fX3N1cGVyX18uY29tbWVudC5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZGVjbGFyYXRpb24gPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKFhNTFN0cmVhbVdyaXRlci5fX3N1cGVyX18uZGVjbGFyYXRpb24uY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmRvY1R5cGUgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIGNoaWxkLCBqLCBsZW4sIHJlZjtcbiAgICAgIGxldmVsIHx8IChsZXZlbCA9IDApO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPCFET0NUWVBFICcgKyBub2RlLnJvb3QoKS5uYW1lKTtcbiAgICAgIGlmIChub2RlLnB1YklEICYmIG5vZGUuc3lzSUQpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyBQVUJMSUMgXCInICsgbm9kZS5wdWJJRCArICdcIiBcIicgKyBub2RlLnN5c0lEICsgJ1wiJyk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuc3lzSUQpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIicpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnIFsnKTtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICAgIHJlZiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmW2pdO1xuICAgICAgICAgIHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIGxldmVsICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnXScpO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUob3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz4nKTtcbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmVsZW1lbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIGF0dCwgY2hpbGQsIGNoaWxkTm9kZUNvdW50LCBmaXJzdENoaWxkTm9kZSwgaiwgbGVuLCBuYW1lLCBwcmV0dHlTdXBwcmVzc2VkLCByZWYsIHJlZjE7XG4gICAgICBsZXZlbCB8fCAobGV2ZWwgPSAwKTtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCcgKyBub2RlLm5hbWUpO1xuICAgICAgcmVmID0gbm9kZS5hdHRyaWJzO1xuICAgICAgZm9yIChuYW1lIGluIHJlZikge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIG5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgYXR0ID0gcmVmW25hbWVdO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZShhdHQsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIH1cbiAgICAgIGNoaWxkTm9kZUNvdW50ID0gbm9kZS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICBmaXJzdENoaWxkTm9kZSA9IGNoaWxkTm9kZUNvdW50ID09PSAwID8gbnVsbCA6IG5vZGUuY2hpbGRyZW5bMF07XG4gICAgICBpZiAoY2hpbGROb2RlQ291bnQgPT09IDAgfHwgbm9kZS5jaGlsZHJlbi5ldmVyeShmdW5jdGlvbihlKSB7XG4gICAgICAgIHJldHVybiAoZS50eXBlID09PSBOb2RlVHlwZS5UZXh0IHx8IGUudHlwZSA9PT0gTm9kZVR5cGUuUmF3KSAmJiBlLnZhbHVlID09PSAnJztcbiAgICAgIH0pKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93RW1wdHkpIHtcbiAgICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPicpO1xuICAgICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPC8nICsgbm9kZS5uYW1lICsgJz4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUob3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJy8+Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmV0dHkgJiYgY2hpbGROb2RlQ291bnQgPT09IDEgJiYgKGZpcnN0Q2hpbGROb2RlLnR5cGUgPT09IE5vZGVUeXBlLlRleHQgfHwgZmlyc3RDaGlsZE5vZGUudHlwZSA9PT0gTm9kZVR5cGUuUmF3KSAmJiAoZmlyc3RDaGlsZE5vZGUudmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJz4nKTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgb3B0aW9ucy5zdXBwcmVzc1ByZXR0eUNvdW50Kys7XG4gICAgICAgIHByZXR0eVN1cHByZXNzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLndyaXRlQ2hpbGROb2RlKGZpcnN0Q2hpbGROb2RlLCBvcHRpb25zLCBsZXZlbCArIDEpO1xuICAgICAgICBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQtLTtcbiAgICAgICAgcHJldHR5U3VwcHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc8LycgKyBub2RlLm5hbWUgKyAnPicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICAgIHJlZjEgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWYxW2pdO1xuICAgICAgICAgIHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIGxldmVsICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPC8nICsgbm9kZS5uYW1lICsgJz4nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLnByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLnJhdyA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5yYXcuY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKFhNTFN0cmVhbVdyaXRlci5fX3N1cGVyX18udGV4dC5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZHRkQXR0TGlzdCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5kdGRBdHRMaXN0LmNhbGwodGhpcywgbm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5kdGRFbGVtZW50ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmR0ZEVsZW1lbnQuY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmR0ZEVudGl0eSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5kdGRFbnRpdHkuY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmR0ZE5vdGF0aW9uID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmR0ZE5vdGF0aW9uLmNhbGwodGhpcywgbm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTFN0cmVhbVdyaXRlcjtcblxuICB9KShYTUxXcml0ZXJCYXNlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxTdHJpbmdXcml0ZXIsIFhNTFdyaXRlckJhc2UsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBYTUxXcml0ZXJCYXNlID0gcmVxdWlyZSgnLi9YTUxXcml0ZXJCYXNlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxTdHJpbmdXcml0ZXIgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxTdHJpbmdXcml0ZXIsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MU3RyaW5nV3JpdGVyKG9wdGlvbnMpIHtcbiAgICAgIFhNTFN0cmluZ1dyaXRlci5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBYTUxTdHJpbmdXcml0ZXIucHJvdG90eXBlLmRvY3VtZW50ID0gZnVuY3Rpb24oZG9jLCBvcHRpb25zKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIGxlbiwgciwgcmVmO1xuICAgICAgb3B0aW9ucyA9IHRoaXMuZmlsdGVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgIHIgPSAnJztcbiAgICAgIHJlZiA9IGRvYy5jaGlsZHJlbjtcbiAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjaGlsZCA9IHJlZltpXTtcbiAgICAgICAgciArPSB0aGlzLndyaXRlQ2hpbGROb2RlKGNoaWxkLCBvcHRpb25zLCAwKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnByZXR0eSAmJiByLnNsaWNlKC1vcHRpb25zLm5ld2xpbmUubGVuZ3RoKSA9PT0gb3B0aW9ucy5uZXdsaW5lKSB7XG4gICAgICAgIHIgPSByLnNsaWNlKDAsIC1vcHRpb25zLm5ld2xpbmUubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MU3RyaW5nV3JpdGVyO1xuXG4gIH0pKFhNTFdyaXRlckJhc2UpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTFN0cmluZ2lmaWVyLFxuICAgIGJpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFN0cmluZ2lmaWVyID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTFN0cmluZ2lmaWVyKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuYXNzZXJ0TGVnYWxOYW1lID0gYmluZCh0aGlzLmFzc2VydExlZ2FsTmFtZSwgdGhpcyk7XG4gICAgICB0aGlzLmFzc2VydExlZ2FsQ2hhciA9IGJpbmQodGhpcy5hc3NlcnRMZWdhbENoYXIsIHRoaXMpO1xuICAgICAgdmFyIGtleSwgcmVmLCB2YWx1ZTtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudmVyc2lvbikge1xuICAgICAgICB0aGlzLm9wdGlvbnMudmVyc2lvbiA9ICcxLjAnO1xuICAgICAgfVxuICAgICAgcmVmID0gb3B0aW9ucy5zdHJpbmdpZnkgfHwge307XG4gICAgICBmb3IgKGtleSBpbiByZWYpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFsdWUgPSByZWZba2V5XTtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLm5hbWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbE5hbWUoJycgKyB2YWwgfHwgJycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcih0aGlzLnRleHRFc2NhcGUoJycgKyB2YWwgfHwgJycpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNkYXRhID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICB2YWwgPSB2YWwucmVwbGFjZSgnXV0+JywgJ11dXV0+PCFbQ0RBVEFbPicpO1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKHZhbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb21tZW50ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICBpZiAodmFsLm1hdGNoKC8tLS8pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbW1lbnQgdGV4dCBjYW5ub3QgY29udGFpbiBkb3VibGUtaHlwZW46IFwiICsgdmFsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcih2YWwpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnICsgdmFsIHx8ICcnO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuYXR0VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIodGhpcy5hdHRFc2NhcGUodmFsID0gJycgKyB2YWwgfHwgJycpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmluc1RhcmdldCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcignJyArIHZhbCB8fCAnJyk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5pbnNWYWx1ZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHZhbCA9ICcnICsgdmFsIHx8ICcnO1xuICAgICAgaWYgKHZhbC5tYXRjaCgvXFw/Pi8pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB2YWx1ZTogXCIgKyB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKHZhbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS54bWxWZXJzaW9uID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICBpZiAoIXZhbC5tYXRjaCgvMVxcLlswLTldKy8pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmVyc2lvbiBudW1iZXI6IFwiICsgdmFsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS54bWxFbmNvZGluZyA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHZhbCA9ICcnICsgdmFsIHx8ICcnO1xuICAgICAgaWYgKCF2YWwubWF0Y2goL15bQS1aYS16XSg/OltBLVphLXowLTkuXy1dKSokLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBlbmNvZGluZzogXCIgKyB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKHZhbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS54bWxTdGFuZGFsb25lID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICByZXR1cm4gXCJ5ZXNcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIm5vXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5kdGRQdWJJRCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcignJyArIHZhbCB8fCAnJyk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5kdGRTeXNJRCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcignJyArIHZhbCB8fCAnJyk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5kdGRFbGVtZW50VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIoJycgKyB2YWwgfHwgJycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuZHRkQXR0VHlwZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcignJyArIHZhbCB8fCAnJyk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5kdGRBdHREZWZhdWx0ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZEVudGl0eVZhbHVlID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZE5EYXRhID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbnZlcnRBdHRLZXkgPSAnQCc7XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29udmVydFBJS2V5ID0gJz8nO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbnZlcnRUZXh0S2V5ID0gJyN0ZXh0JztcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb252ZXJ0Q0RhdGFLZXkgPSAnI2NkYXRhJztcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb252ZXJ0Q29tbWVudEtleSA9ICcjY29tbWVudCc7XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29udmVydFJhd0tleSA9ICcjcmF3JztcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5hc3NlcnRMZWdhbENoYXIgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHZhciByZWdleCwgcmVzO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH1cbiAgICAgIHJlZ2V4ID0gJyc7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnZlcnNpb24gPT09ICcxLjAnKSB7XG4gICAgICAgIHJlZ2V4ID0gL1tcXDAtXFx4MDhcXHgwQlxcZlxceDBFLVxceDFGXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbiAgICAgICAgaWYgKHJlcyA9IHN0ci5tYXRjaChyZWdleCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBzdHJpbmc6IFwiICsgc3RyICsgXCIgYXQgaW5kZXggXCIgKyByZXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy52ZXJzaW9uID09PSAnMS4xJykge1xuICAgICAgICByZWdleCA9IC9bXFwwXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLztcbiAgICAgICAgaWYgKHJlcyA9IHN0ci5tYXRjaChyZWdleCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBzdHJpbmc6IFwiICsgc3RyICsgXCIgYXQgaW5kZXggXCIgKyByZXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuYXNzZXJ0TGVnYWxOYW1lID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICB2YXIgcmVnZXg7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3NlcnRMZWdhbENoYXIoc3RyKTtcbiAgICAgIHJlZ2V4ID0gL14oWzpBLVpfYS16XFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF18W1xcdUQ4MDAtXFx1REI3Rl1bXFx1REMwMC1cXHVERkZGXSkoW1xceDJEXFwuMC06QS1aX2EtelxceEI3XFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDXFx1MjAwRFxcdTIwM0ZcXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXXxbXFx1RDgwMC1cXHVEQjdGXVtcXHVEQzAwLVxcdURGRkZdKSokLztcbiAgICAgIGlmICghc3RyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBuYW1lXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnRleHRFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHZhciBhbXByZWdleDtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgICB9XG4gICAgICBhbXByZWdleCA9IHRoaXMub3B0aW9ucy5ub0RvdWJsZUVuY29kaW5nID8gLyg/ISZcXFMrOykmL2cgOiAvJi9nO1xuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKGFtcHJlZ2V4LCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoL1xcci9nLCAnJiN4RDsnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmF0dEVzY2FwZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIGFtcHJlZ2V4O1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH1cbiAgICAgIGFtcHJlZ2V4ID0gdGhpcy5vcHRpb25zLm5vRG91YmxlRW5jb2RpbmcgPyAvKD8hJlxcUys7KSYvZyA6IC8mL2c7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoYW1wcmVnZXgsICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JykucmVwbGFjZSgvXFx0L2csICcmI3g5OycpLnJlcGxhY2UoL1xcbi9nLCAnJiN4QTsnKS5yZXBsYWNlKC9cXHIvZywgJyYjeEQ7Jyk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxTdHJpbmdpZmllcjtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxDaGFyYWN0ZXJEYXRhLCBYTUxUZXh0LFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MQ2hhcmFjdGVyRGF0YSA9IHJlcXVpcmUoJy4vWE1MQ2hhcmFjdGVyRGF0YScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MVGV4dCA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTFRleHQsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MVGV4dChwYXJlbnQsIHRleHQpIHtcbiAgICAgIFhNTFRleHQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBlbGVtZW50IHRleHQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5hbWUgPSBcIiN0ZXh0XCI7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5UZXh0O1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5LnRleHQodGV4dCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTFRleHQucHJvdG90eXBlLCAnaXNFbGVtZW50Q29udGVudFdoaXRlc3BhY2UnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MVGV4dC5wcm90b3R5cGUsICd3aG9sZVRleHQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbmV4dCwgcHJldiwgc3RyO1xuICAgICAgICBzdHIgPSAnJztcbiAgICAgICAgcHJldiA9IHRoaXMucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICB3aGlsZSAocHJldikge1xuICAgICAgICAgIHN0ciA9IHByZXYuZGF0YSArIHN0cjtcbiAgICAgICAgICBwcmV2ID0gcHJldi5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IHRoaXMuZGF0YTtcbiAgICAgICAgbmV4dCA9IHRoaXMubmV4dFNpYmxpbmc7XG4gICAgICAgIHdoaWxlIChuZXh0KSB7XG4gICAgICAgICAgc3RyID0gc3RyICsgbmV4dC5kYXRhO1xuICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHRTaWJsaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxUZXh0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTFRleHQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIudGV4dCh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICBYTUxUZXh0LnByb3RvdHlwZS5zcGxpdFRleHQgPSBmdW5jdGlvbihvZmZzZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MVGV4dC5wcm90b3R5cGUucmVwbGFjZVdob2xlVGV4dCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTFRleHQ7XG5cbiAgfSkoWE1MQ2hhcmFjdGVyRGF0YSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFdyaXRlclN0YXRlLCBYTUxDRGF0YSwgWE1MQ29tbWVudCwgWE1MRFREQXR0TGlzdCwgWE1MRFRERWxlbWVudCwgWE1MRFRERW50aXR5LCBYTUxEVEROb3RhdGlvbiwgWE1MRGVjbGFyYXRpb24sIFhNTERvY1R5cGUsIFhNTER1bW15LCBYTUxFbGVtZW50LCBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIFhNTFJhdywgWE1MVGV4dCwgWE1MV3JpdGVyQmFzZSwgYXNzaWduLFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBhc3NpZ24gPSByZXF1aXJlKCcuL1V0aWxpdHknKS5hc3NpZ247XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MRGVjbGFyYXRpb24gPSByZXF1aXJlKCcuL1hNTERlY2xhcmF0aW9uJyk7XG5cbiAgWE1MRG9jVHlwZSA9IHJlcXVpcmUoJy4vWE1MRG9jVHlwZScpO1xuXG4gIFhNTENEYXRhID0gcmVxdWlyZSgnLi9YTUxDRGF0YScpO1xuXG4gIFhNTENvbW1lbnQgPSByZXF1aXJlKCcuL1hNTENvbW1lbnQnKTtcblxuICBYTUxFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxFbGVtZW50Jyk7XG5cbiAgWE1MUmF3ID0gcmVxdWlyZSgnLi9YTUxSYXcnKTtcblxuICBYTUxUZXh0ID0gcmVxdWlyZSgnLi9YTUxUZXh0Jyk7XG5cbiAgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gcmVxdWlyZSgnLi9YTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24nKTtcblxuICBYTUxEdW1teSA9IHJlcXVpcmUoJy4vWE1MRHVtbXknKTtcblxuICBYTUxEVERBdHRMaXN0ID0gcmVxdWlyZSgnLi9YTUxEVERBdHRMaXN0Jyk7XG5cbiAgWE1MRFRERWxlbWVudCA9IHJlcXVpcmUoJy4vWE1MRFRERWxlbWVudCcpO1xuXG4gIFhNTERUREVudGl0eSA9IHJlcXVpcmUoJy4vWE1MRFRERW50aXR5Jyk7XG5cbiAgWE1MRFRETm90YXRpb24gPSByZXF1aXJlKCcuL1hNTERURE5vdGF0aW9uJyk7XG5cbiAgV3JpdGVyU3RhdGUgPSByZXF1aXJlKCcuL1dyaXRlclN0YXRlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxXcml0ZXJCYXNlID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTFdyaXRlckJhc2Uob3B0aW9ucykge1xuICAgICAgdmFyIGtleSwgcmVmLCB2YWx1ZTtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgcmVmID0gb3B0aW9ucy53cml0ZXIgfHwge307XG4gICAgICBmb3IgKGtleSBpbiByZWYpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFsdWUgPSByZWZba2V5XTtcbiAgICAgICAgdGhpc1tcIl9cIiArIGtleV0gPSB0aGlzW2tleV07XG4gICAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmZpbHRlck9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsdGVyZWRPcHRpb25zLCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHJlZjQsIHJlZjUsIHJlZjY7XG4gICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgICAgb3B0aW9ucyA9IGFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGZpbHRlcmVkT3B0aW9ucyA9IHtcbiAgICAgICAgd3JpdGVyOiB0aGlzXG4gICAgICB9O1xuICAgICAgZmlsdGVyZWRPcHRpb25zLnByZXR0eSA9IG9wdGlvbnMucHJldHR5IHx8IGZhbHNlO1xuICAgICAgZmlsdGVyZWRPcHRpb25zLmFsbG93RW1wdHkgPSBvcHRpb25zLmFsbG93RW1wdHkgfHwgZmFsc2U7XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMuaW5kZW50ID0gKHJlZiA9IG9wdGlvbnMuaW5kZW50KSAhPSBudWxsID8gcmVmIDogJyAgJztcbiAgICAgIGZpbHRlcmVkT3B0aW9ucy5uZXdsaW5lID0gKHJlZjEgPSBvcHRpb25zLm5ld2xpbmUpICE9IG51bGwgPyByZWYxIDogJ1xcbic7XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMub2Zmc2V0ID0gKHJlZjIgPSBvcHRpb25zLm9mZnNldCkgIT0gbnVsbCA/IHJlZjIgOiAwO1xuICAgICAgZmlsdGVyZWRPcHRpb25zLmRvbnRQcmV0dHlUZXh0Tm9kZXMgPSAocmVmMyA9IChyZWY0ID0gb3B0aW9ucy5kb250UHJldHR5VGV4dE5vZGVzKSAhPSBudWxsID8gcmVmNCA6IG9wdGlvbnMuZG9udHByZXR0eXRleHRub2RlcykgIT0gbnVsbCA/IHJlZjMgOiAwO1xuICAgICAgZmlsdGVyZWRPcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggPSAocmVmNSA9IChyZWY2ID0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoKSAhPSBudWxsID8gcmVmNiA6IG9wdGlvbnMuc3BhY2ViZWZvcmVzbGFzaCkgIT0gbnVsbCA/IHJlZjUgOiAnJztcbiAgICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCA9PT0gdHJ1ZSkge1xuICAgICAgICBmaWx0ZXJlZE9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCA9ICcgJztcbiAgICAgIH1cbiAgICAgIGZpbHRlcmVkT3B0aW9ucy5zdXBwcmVzc1ByZXR0eUNvdW50ID0gMDtcbiAgICAgIGZpbHRlcmVkT3B0aW9ucy51c2VyID0ge307XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucztcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuaW5kZW50ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciBpbmRlbnRMZXZlbDtcbiAgICAgIGlmICghb3B0aW9ucy5wcmV0dHkgfHwgb3B0aW9ucy5zdXBwcmVzc1ByZXR0eUNvdW50KSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmV0dHkpIHtcbiAgICAgICAgaW5kZW50TGV2ZWwgPSAobGV2ZWwgfHwgMCkgKyBvcHRpb25zLm9mZnNldCArIDE7XG4gICAgICAgIGlmIChpbmRlbnRMZXZlbCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEFycmF5KGluZGVudExldmVsKS5qb2luKG9wdGlvbnMuaW5kZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5lbmRsaW5lID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIGlmICghb3B0aW9ucy5wcmV0dHkgfHwgb3B0aW9ucy5zdXBwcmVzc1ByZXR0eUNvdW50KSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm5ld2xpbmU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dCwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuQXR0cmlidXRlKGF0dCwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgciA9ICcgJyArIGF0dC5uYW1lICsgJz1cIicgKyBhdHQudmFsdWUgKyAnXCInO1xuICAgICAgdGhpcy5jbG9zZUF0dHJpYnV0ZShhdHQsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5jZGF0YSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpICsgJzwhW0NEQVRBWyc7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSBub2RlLnZhbHVlO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSAnXV0+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5jb21tZW50ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCEtLSAnO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gbm9kZS52YWx1ZTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gJyAtLT4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmRlY2xhcmF0aW9uID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPD94bWwnO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gJyB2ZXJzaW9uPVwiJyArIG5vZGUudmVyc2lvbiArICdcIic7XG4gICAgICBpZiAobm9kZS5lbmNvZGluZyAhPSBudWxsKSB7XG4gICAgICAgIHIgKz0gJyBlbmNvZGluZz1cIicgKyBub2RlLmVuY29kaW5nICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnN0YW5kYWxvbmUgIT0gbnVsbCkge1xuICAgICAgICByICs9ICcgc3RhbmRhbG9uZT1cIicgKyBub2RlLnN0YW5kYWxvbmUgKyAnXCInO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSBvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnPz4nO1xuICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuZG9jVHlwZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIGxlbiwgciwgcmVmO1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHIgKz0gJzwhRE9DVFlQRSAnICsgbm9kZS5yb290KCkubmFtZTtcbiAgICAgIGlmIChub2RlLnB1YklEICYmIG5vZGUuc3lzSUQpIHtcbiAgICAgICAgciArPSAnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnN5c0lEKSB7XG4gICAgICAgIHIgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHIgKz0gJyBbJztcbiAgICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgICByZWYgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZWYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjaGlsZCA9IHJlZltpXTtcbiAgICAgICAgICByICs9IHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIGxldmVsICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICByICs9ICddJztcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz4nO1xuICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgYXR0LCBjaGlsZCwgY2hpbGROb2RlQ291bnQsIGZpcnN0Q2hpbGROb2RlLCBpLCBqLCBsZW4sIGxlbjEsIG5hbWUsIHByZXR0eVN1cHByZXNzZWQsIHIsIHJlZiwgcmVmMSwgcmVmMjtcbiAgICAgIGxldmVsIHx8IChsZXZlbCA9IDApO1xuICAgICAgcHJldHR5U3VwcHJlc3NlZCA9IGZhbHNlO1xuICAgICAgciA9ICcnO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgKz0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpICsgJzwnICsgbm9kZS5uYW1lO1xuICAgICAgcmVmID0gbm9kZS5hdHRyaWJzO1xuICAgICAgZm9yIChuYW1lIGluIHJlZikge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIG5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgYXR0ID0gcmVmW25hbWVdO1xuICAgICAgICByICs9IHRoaXMuYXR0cmlidXRlKGF0dCwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgfVxuICAgICAgY2hpbGROb2RlQ291bnQgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIGZpcnN0Q2hpbGROb2RlID0gY2hpbGROb2RlQ291bnQgPT09IDAgPyBudWxsIDogbm9kZS5jaGlsZHJlblswXTtcbiAgICAgIGlmIChjaGlsZE5vZGVDb3VudCA9PT0gMCB8fCBub2RlLmNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIChlLnR5cGUgPT09IE5vZGVUeXBlLlRleHQgfHwgZS50eXBlID09PSBOb2RlVHlwZS5SYXcpICYmIGUudmFsdWUgPT09ICcnO1xuICAgICAgfSkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dFbXB0eSkge1xuICAgICAgICAgIHIgKz0gJz4nO1xuICAgICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgICByICs9ICc8LycgKyBub2RlLm5hbWUgKyAnPicgKyB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgICByICs9IG9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCArICcvPicgKyB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMucHJldHR5ICYmIGNoaWxkTm9kZUNvdW50ID09PSAxICYmIChmaXJzdENoaWxkTm9kZS50eXBlID09PSBOb2RlVHlwZS5UZXh0IHx8IGZpcnN0Q2hpbGROb2RlLnR5cGUgPT09IE5vZGVUeXBlLlJhdykgJiYgKGZpcnN0Q2hpbGROb2RlLnZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgIHIgKz0gJz4nO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgICBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQrKztcbiAgICAgICAgcHJldHR5U3VwcHJlc3NlZCA9IHRydWU7XG4gICAgICAgIHIgKz0gdGhpcy53cml0ZUNoaWxkTm9kZShmaXJzdENoaWxkTm9kZSwgb3B0aW9ucywgbGV2ZWwgKyAxKTtcbiAgICAgICAgb3B0aW9ucy5zdXBwcmVzc1ByZXR0eUNvdW50LS07XG4gICAgICAgIHByZXR0eVN1cHByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICByICs9ICc8LycgKyBub2RlLm5hbWUgKyAnPicgKyB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZG9udFByZXR0eVRleHROb2Rlcykge1xuICAgICAgICAgIHJlZjEgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNoaWxkID0gcmVmMVtpXTtcbiAgICAgICAgICAgIGlmICgoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuVGV4dCB8fCBjaGlsZC50eXBlID09PSBOb2RlVHlwZS5SYXcpICYmIChjaGlsZC52YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgICAgICBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQrKztcbiAgICAgICAgICAgICAgcHJldHR5U3VwcHJlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByICs9ICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICAgIHJlZjIgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4xID0gcmVmMi5sZW5ndGg7IGogPCBsZW4xOyBqKyspIHtcbiAgICAgICAgICBjaGlsZCA9IHJlZjJbal07XG4gICAgICAgICAgciArPSB0aGlzLndyaXRlQ2hpbGROb2RlKGNoaWxkLCBvcHRpb25zLCBsZXZlbCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgciArPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPC8nICsgbm9kZS5uYW1lICsgJz4nO1xuICAgICAgICBpZiAocHJldHR5U3VwcHJlc3NlZCkge1xuICAgICAgICAgIG9wdGlvbnMuc3VwcHJlc3NQcmV0dHlDb3VudC0tO1xuICAgICAgICB9XG4gICAgICAgIHIgKz0gdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB9XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUud3JpdGVDaGlsZE5vZGUgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5DRGF0YTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jZGF0YShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuQ29tbWVudDpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb21tZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5FbGVtZW50OlxuICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLlJhdzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5yYXcobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLlRleHQ6XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuUHJvY2Vzc2luZ0luc3RydWN0aW9uOlxuICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuRHVtbXk6XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkRlY2xhcmF0aW9uOlxuICAgICAgICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5Eb2NUeXBlOlxuICAgICAgICAgIHJldHVybiB0aGlzLmRvY1R5cGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkF0dHJpYnV0ZURlY2xhcmF0aW9uOlxuICAgICAgICAgIHJldHVybiB0aGlzLmR0ZEF0dExpc3Qobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkVsZW1lbnREZWNsYXJhdGlvbjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kdGRFbGVtZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5FbnRpdHlEZWNsYXJhdGlvbjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kdGRFbnRpdHkobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLk5vdGF0aW9uRGVjbGFyYXRpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZHRkTm90YXRpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gWE1MIG5vZGUgdHlwZTogXCIgKyBub2RlLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8Pyc7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSBub2RlLnRhcmdldDtcbiAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgIHIgKz0gJyAnICsgbm9kZS52YWx1ZTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz8+JztcbiAgICAgIHIgKz0gdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLnJhdyA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gbm9kZS52YWx1ZTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICByICs9IG5vZGUudmFsdWU7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9IHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5kdGRBdHRMaXN0ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCFBVFRMSVNUJztcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICByICs9ICcgJyArIG5vZGUuZWxlbWVudE5hbWUgKyAnICcgKyBub2RlLmF0dHJpYnV0ZU5hbWUgKyAnICcgKyBub2RlLmF0dHJpYnV0ZVR5cGU7XG4gICAgICBpZiAobm9kZS5kZWZhdWx0VmFsdWVUeXBlICE9PSAnI0RFRkFVTFQnKSB7XG4gICAgICAgIHIgKz0gJyAnICsgbm9kZS5kZWZhdWx0VmFsdWVUeXBlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHIgKz0gJyBcIicgKyBub2RlLmRlZmF1bHRWYWx1ZSArICdcIic7XG4gICAgICB9XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9IG9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5kdGRFbGVtZW50ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCFFTEVNRU5UJztcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICByICs9ICcgJyArIG5vZGUubmFtZSArICcgJyArIG5vZGUudmFsdWU7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9IG9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5kdGRFbnRpdHkgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8IUVOVElUWSc7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgaWYgKG5vZGUucGUpIHtcbiAgICAgICAgciArPSAnICUnO1xuICAgICAgfVxuICAgICAgciArPSAnICcgKyBub2RlLm5hbWU7XG4gICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICByICs9ICcgXCInICsgbm9kZS52YWx1ZSArICdcIic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobm9kZS5wdWJJRCAmJiBub2RlLnN5c0lEKSB7XG4gICAgICAgICAgciArPSAnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuc3lzSUQpIHtcbiAgICAgICAgICByICs9ICcgU1lTVEVNIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm5EYXRhKSB7XG4gICAgICAgICAgciArPSAnIE5EQVRBICcgKyBub2RlLm5EYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9IG9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5kdGROb3RhdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpICsgJzwhTk9UQVRJT04nO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gJyAnICsgbm9kZS5uYW1lO1xuICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCIgXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUucHViSUQpIHtcbiAgICAgICAgciArPSAnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiJztcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICByICs9ICcgU1lTVEVNIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSBvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnPicgKyB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUub3Blbk5vZGUgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge307XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5jbG9zZU5vZGUgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge307XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5vcGVuQXR0cmlidXRlID0gZnVuY3Rpb24oYXR0LCBvcHRpb25zLCBsZXZlbCkge307XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5jbG9zZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dCwgb3B0aW9ucywgbGV2ZWwpIHt9O1xuXG4gICAgcmV0dXJuIFhNTFdyaXRlckJhc2U7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgV3JpdGVyU3RhdGUsIFhNTERPTUltcGxlbWVudGF0aW9uLCBYTUxEb2N1bWVudCwgWE1MRG9jdW1lbnRDQiwgWE1MU3RyZWFtV3JpdGVyLCBYTUxTdHJpbmdXcml0ZXIsIGFzc2lnbiwgaXNGdW5jdGlvbiwgcmVmO1xuXG4gIHJlZiA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLCBhc3NpZ24gPSByZWYuYXNzaWduLCBpc0Z1bmN0aW9uID0gcmVmLmlzRnVuY3Rpb247XG5cbiAgWE1MRE9NSW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL1hNTERPTUltcGxlbWVudGF0aW9uJyk7XG5cbiAgWE1MRG9jdW1lbnQgPSByZXF1aXJlKCcuL1hNTERvY3VtZW50Jyk7XG5cbiAgWE1MRG9jdW1lbnRDQiA9IHJlcXVpcmUoJy4vWE1MRG9jdW1lbnRDQicpO1xuXG4gIFhNTFN0cmluZ1dyaXRlciA9IHJlcXVpcmUoJy4vWE1MU3RyaW5nV3JpdGVyJyk7XG5cbiAgWE1MU3RyZWFtV3JpdGVyID0gcmVxdWlyZSgnLi9YTUxTdHJlYW1Xcml0ZXInKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBXcml0ZXJTdGF0ZSA9IHJlcXVpcmUoJy4vV3JpdGVyU3RhdGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cy5jcmVhdGUgPSBmdW5jdGlvbihuYW1lLCB4bWxkZWMsIGRvY3R5cGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZG9jLCByb290O1xuICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJvb3QgZWxlbWVudCBuZWVkcyBhIG5hbWUuXCIpO1xuICAgIH1cbiAgICBvcHRpb25zID0gYXNzaWduKHt9LCB4bWxkZWMsIGRvY3R5cGUsIG9wdGlvbnMpO1xuICAgIGRvYyA9IG5ldyBYTUxEb2N1bWVudChvcHRpb25zKTtcbiAgICByb290ID0gZG9jLmVsZW1lbnQobmFtZSk7XG4gICAgaWYgKCFvcHRpb25zLmhlYWRsZXNzKSB7XG4gICAgICBkb2MuZGVjbGFyYXRpb24ob3B0aW9ucyk7XG4gICAgICBpZiAoKG9wdGlvbnMucHViSUQgIT0gbnVsbCkgfHwgKG9wdGlvbnMuc3lzSUQgIT0gbnVsbCkpIHtcbiAgICAgICAgZG9jLmR0ZChvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHMuYmVnaW4gPSBmdW5jdGlvbihvcHRpb25zLCBvbkRhdGEsIG9uRW5kKSB7XG4gICAgdmFyIHJlZjE7XG4gICAgaWYgKGlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgIHJlZjEgPSBbb3B0aW9ucywgb25EYXRhXSwgb25EYXRhID0gcmVmMVswXSwgb25FbmQgPSByZWYxWzFdO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAob25EYXRhKSB7XG4gICAgICByZXR1cm4gbmV3IFhNTERvY3VtZW50Q0Iob3B0aW9ucywgb25EYXRhLCBvbkVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgWE1MRG9jdW1lbnQob3B0aW9ucyk7XG4gICAgfVxuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzLnN0cmluZ1dyaXRlciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFhNTFN0cmluZ1dyaXRlcihvcHRpb25zKTtcbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0cy5zdHJlYW1Xcml0ZXIgPSBmdW5jdGlvbihzdHJlYW0sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFhNTFN0cmVhbVdyaXRlcihzdHJlYW0sIG9wdGlvbnMpO1xuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzLmltcGxlbWVudGF0aW9uID0gbmV3IFhNTERPTUltcGxlbWVudGF0aW9uKCk7XG5cbiAgbW9kdWxlLmV4cG9ydHMubm9kZVR5cGUgPSBOb2RlVHlwZTtcblxuICBtb2R1bGUuZXhwb3J0cy53cml0ZXJTdGF0ZSA9IFdyaXRlclN0YXRlO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiZXhwb3J0IHZhciBQSkRfM1BBUkFNID0gMTtcbmV4cG9ydCB2YXIgUEpEXzdQQVJBTSA9IDI7XG5leHBvcnQgdmFyIFBKRF9XR1M4NCA9IDQ7IC8vIFdHUzg0IG9yIGVxdWl2YWxlbnRcbmV4cG9ydCB2YXIgUEpEX05PREFUVU0gPSA1OyAvLyBXR1M4NCBvciBlcXVpdmFsZW50XG5leHBvcnQgdmFyIFNFQ19UT19SQUQgPSA0Ljg0ODEzNjgxMTA5NTM1OTkzNTg5OTE0MTAyMzU3ZS02O1xuZXhwb3J0IHZhciBIQUxGX1BJID0gTWF0aC5QSS8yO1xuLy8gZWxsaXBvaWQgcGpfc2V0X2VsbC5jXG5leHBvcnQgdmFyIFNJWFRIID0gMC4xNjY2NjY2NjY2NjY2NjY2NjY3O1xuLyogMS82ICovXG5leHBvcnQgdmFyIFJBNCA9IDAuMDQ3MjIyMjIyMjIyMjIyMjIyMjI7XG4vKiAxNy8zNjAgKi9cbmV4cG9ydCB2YXIgUkE2ID0gMC4wMjIxNTYwODQ2NTYwODQ2NTYwODtcbmV4cG9ydCB2YXIgRVBTTE4gPSAxLjBlLTEwO1xuLy8geW91J2QgdGhpbmsgeW91IGNvdWxkIHVzZSBOdW1iZXIuRVBTSUxPTiBhYm92ZSBidXQgdGhhdCBtYWtlc1xuLy8gTW9sbHdlaWRlIGdldCBpbnRvIGFuIGluZmluYXRlIGxvb3AuXG5cbmV4cG9ydCB2YXIgRDJSID0gMC4wMTc0NTMyOTI1MTk5NDMyOTU3NztcbmV4cG9ydCB2YXIgUjJEID0gNTcuMjk1Nzc5NTEzMDgyMzIwODg7XG5leHBvcnQgdmFyIEZPUlRQSSA9IE1hdGguUEkvNDtcbmV4cG9ydCB2YXIgVFdPX1BJID0gTWF0aC5QSSAqIDI7XG4vLyBTUEkgaXMgc2xpZ2h0bHkgZ3JlYXRlciB0aGFuIE1hdGguUEksIHNvIHZhbHVlcyB0aGF0IGV4Y2VlZCB0aGUgLTE4MC4uMTgwXG4vLyBkZWdyZWUgcmFuZ2UgYnkgYSB0aW55IGFtb3VudCBkb24ndCBnZXQgd3JhcHBlZC4gVGhpcyBwcmV2ZW50cyBwb2ludHMgdGhhdFxuLy8gaGF2ZSBkcmlmdGVkIGZyb20gdGhlaXIgb3JpZ2luYWwgbG9jYXRpb24gYWxvbmcgdGhlIDE4MHRoIG1lcmlkaWFuIChkdWUgdG9cbi8vIGZsb2F0aW5nIHBvaW50IGVycm9yKSBmcm9tIGNoYW5naW5nIHRoZWlyIHNpZ24uXG5leHBvcnQgdmFyIFNQSSA9IDMuMTQxNTkyNjUzNTk7XG4iLCJ2YXIgZXhwb3J0cyA9IHt9O1xuZXhwb3J0IHtleHBvcnRzIGFzIGRlZmF1bHR9O1xuXG5leHBvcnRzLmdyZWVud2ljaCA9IDAuMDsgLy9cIjBkRVwiLFxuZXhwb3J0cy5saXNib24gPSAtOS4xMzE5MDYxMTExMTE7IC8vXCI5ZDA3JzU0Ljg2MlxcXCJXXCIsXG5leHBvcnRzLnBhcmlzID0gMi4zMzcyMjkxNjY2Njc7IC8vXCIyZDIwJzE0LjAyNVxcXCJFXCIsXG5leHBvcnRzLmJvZ290YSA9IC03NC4wODA5MTY2NjY2Njc7IC8vXCI3NGQwNCc1MS4zXFxcIldcIixcbmV4cG9ydHMubWFkcmlkID0gLTMuNjg3OTM4ODg4ODg5OyAvL1wiM2Q0MScxNi41OFxcXCJXXCIsXG5leHBvcnRzLnJvbWUgPSAxMi40NTIzMzMzMzMzMzM7IC8vXCIxMmQyNyc4LjRcXFwiRVwiLFxuZXhwb3J0cy5iZXJuID0gNy40Mzk1ODMzMzMzMzM7IC8vXCI3ZDI2JzIyLjVcXFwiRVwiLFxuZXhwb3J0cy5qYWthcnRhID0gMTA2LjgwNzcxOTQ0NDQ0NDsgLy9cIjEwNmQ0OCcyNy43OVxcXCJFXCIsXG5leHBvcnRzLmZlcnJvID0gLTE3LjY2NjY2NjY2NjY2NzsgLy9cIjE3ZDQwJ1dcIixcbmV4cG9ydHMuYnJ1c3NlbHMgPSA0LjM2Nzk3NTsgLy9cIjRkMjInNC43MVxcXCJFXCIsXG5leHBvcnRzLnN0b2NraG9sbSA9IDE4LjA1ODI3Nzc3Nzc3ODsgLy9cIjE4ZDMnMjkuOFxcXCJFXCIsXG5leHBvcnRzLmF0aGVucyA9IDIzLjcxNjMzNzU7IC8vXCIyM2Q0Mic1OC44MTVcXFwiRVwiLFxuZXhwb3J0cy5vc2xvID0gMTAuNzIyOTE2NjY2NjY3OyAvL1wiMTBkNDMnMjIuNVxcXCJFXCJcbiIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZnQ6IHt0b19tZXRlcjogMC4zMDQ4fSxcbiAgJ3VzLWZ0Jzoge3RvX21ldGVyOiAxMjAwIC8gMzkzN31cbn07XG4iLCJ2YXIgaWdub3JlZENoYXIgPSAvW1xcc19cXC1cXC9cXChcXCldL2c7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXRjaChvYmosIGtleSkge1xuICBpZiAob2JqW2tleV0pIHtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICB2YXIgbGtleSA9IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoaWdub3JlZENoYXIsICcnKTtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHRlc3RrZXksIHByb2Nlc3NlZEtleTtcbiAgd2hpbGUgKCsraSA8IGtleXMubGVuZ3RoKSB7XG4gICAgdGVzdGtleSA9IGtleXNbaV07XG4gICAgcHJvY2Vzc2VkS2V5ID0gdGVzdGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoaWdub3JlZENoYXIsICcnKTtcbiAgICBpZiAocHJvY2Vzc2VkS2V5ID09PSBsa2V5KSB7XG4gICAgICByZXR1cm4gb2JqW3Rlc3RrZXldO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtEMlJ9IGZyb20gJy4vY29uc3RhbnRzL3ZhbHVlcyc7XG5pbXBvcnQgUHJpbWVNZXJpZGlhbiBmcm9tICcuL2NvbnN0YW50cy9QcmltZU1lcmlkaWFuJztcbmltcG9ydCB1bml0cyBmcm9tICcuL2NvbnN0YW50cy91bml0cyc7XG5pbXBvcnQgbWF0Y2ggZnJvbSAnLi9tYXRjaCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZkRhdGEpIHtcbiAgdmFyIHNlbGYgPSB7fTtcbiAgdmFyIHBhcmFtT2JqID0gZGVmRGF0YS5zcGxpdCgnKycpLm1hcChmdW5jdGlvbih2KSB7XG4gICAgcmV0dXJuIHYudHJpbSgpO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBhO1xuICB9KS5yZWR1Y2UoZnVuY3Rpb24ocCwgYSkge1xuICAgIHZhciBzcGxpdCA9IGEuc3BsaXQoJz0nKTtcbiAgICBzcGxpdC5wdXNoKHRydWUpO1xuICAgIHBbc3BsaXRbMF0udG9Mb3dlckNhc2UoKV0gPSBzcGxpdFsxXTtcbiAgICByZXR1cm4gcDtcbiAgfSwge30pO1xuICB2YXIgcGFyYW1OYW1lLCBwYXJhbVZhbCwgcGFyYW1PdXRuYW1lO1xuICB2YXIgcGFyYW1zID0ge1xuICAgIHByb2o6ICdwcm9qTmFtZScsXG4gICAgZGF0dW06ICdkYXR1bUNvZGUnLFxuICAgIHJmOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLnJmID0gcGFyc2VGbG9hdCh2KTtcbiAgICB9LFxuICAgIGxhdF8wOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmxhdDAgPSB2ICogRDJSO1xuICAgIH0sXG4gICAgbGF0XzE6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYubGF0MSA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsYXRfMjogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sYXQyID0gdiAqIEQyUjtcbiAgICB9LFxuICAgIGxhdF90czogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sYXRfdHMgPSB2ICogRDJSO1xuICAgIH0sXG4gICAgbG9uXzA6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYubG9uZzAgPSB2ICogRDJSO1xuICAgIH0sXG4gICAgbG9uXzE6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYubG9uZzEgPSB2ICogRDJSO1xuICAgIH0sXG4gICAgbG9uXzI6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYubG9uZzIgPSB2ICogRDJSO1xuICAgIH0sXG4gICAgYWxwaGE6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuYWxwaGEgPSBwYXJzZUZsb2F0KHYpICogRDJSO1xuICAgIH0sXG4gICAgbG9uYzogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sb25nYyA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICB4XzA6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYueDAgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAgeV8wOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLnkwID0gcGFyc2VGbG9hdCh2KTtcbiAgICB9LFxuICAgIGtfMDogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5rMCA9IHBhcnNlRmxvYXQodik7XG4gICAgfSxcbiAgICBrOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmswID0gcGFyc2VGbG9hdCh2KTtcbiAgICB9LFxuICAgIGE6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuYSA9IHBhcnNlRmxvYXQodik7XG4gICAgfSxcbiAgICBiOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmIgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAgcl9hOiBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuUl9BID0gdHJ1ZTtcbiAgICB9LFxuICAgIHpvbmU6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuem9uZSA9IHBhcnNlSW50KHYsIDEwKTtcbiAgICB9LFxuICAgIHNvdXRoOiBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYudXRtU291dGggPSB0cnVlO1xuICAgIH0sXG4gICAgdG93Z3M4NDogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5kYXR1bV9wYXJhbXMgPSB2LnNwbGl0KFwiLFwiKS5tYXAoZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChhKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdG9fbWV0ZXI6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYudG9fbWV0ZXIgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAgdW5pdHM6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYudW5pdHMgPSB2O1xuICAgICAgdmFyIHVuaXQgPSBtYXRjaCh1bml0cywgdik7XG4gICAgICBpZiAodW5pdCkge1xuICAgICAgICBzZWxmLnRvX21ldGVyID0gdW5pdC50b19tZXRlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZyb21fZ3JlZW53aWNoOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmZyb21fZ3JlZW53aWNoID0gdiAqIEQyUjtcbiAgICB9LFxuICAgIHBtOiBmdW5jdGlvbih2KSB7XG4gICAgICB2YXIgcG0gPSBtYXRjaChQcmltZU1lcmlkaWFuLCB2KTtcbiAgICAgIHNlbGYuZnJvbV9ncmVlbndpY2ggPSAocG0gPyBwbSA6IHBhcnNlRmxvYXQodikpICogRDJSO1xuICAgIH0sXG4gICAgbmFkZ3JpZHM6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIGlmICh2ID09PSAnQG51bGwnKSB7XG4gICAgICAgIHNlbGYuZGF0dW1Db2RlID0gJ25vbmUnO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNlbGYubmFkZ3JpZHMgPSB2O1xuICAgICAgfVxuICAgIH0sXG4gICAgYXhpczogZnVuY3Rpb24odikge1xuICAgICAgdmFyIGxlZ2FsQXhpcyA9IFwiZXduc3VkXCI7XG4gICAgICBpZiAodi5sZW5ndGggPT09IDMgJiYgbGVnYWxBeGlzLmluZGV4T2Yodi5zdWJzdHIoMCwgMSkpICE9PSAtMSAmJiBsZWdhbEF4aXMuaW5kZXhPZih2LnN1YnN0cigxLCAxKSkgIT09IC0xICYmIGxlZ2FsQXhpcy5pbmRleE9mKHYuc3Vic3RyKDIsIDEpKSAhPT0gLTEpIHtcbiAgICAgICAgc2VsZi5heGlzID0gdjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGZvciAocGFyYW1OYW1lIGluIHBhcmFtT2JqKSB7XG4gICAgcGFyYW1WYWwgPSBwYXJhbU9ialtwYXJhbU5hbWVdO1xuICAgIGlmIChwYXJhbU5hbWUgaW4gcGFyYW1zKSB7XG4gICAgICBwYXJhbU91dG5hbWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgcGFyYW1PdXRuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBhcmFtT3V0bmFtZShwYXJhbVZhbCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VsZltwYXJhbU91dG5hbWVdID0gcGFyYW1WYWw7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc2VsZltwYXJhbU5hbWVdID0gcGFyYW1WYWw7XG4gICAgfVxuICB9XG4gIGlmKHR5cGVvZiBzZWxmLmRhdHVtQ29kZSA9PT0gJ3N0cmluZycgJiYgc2VsZi5kYXR1bUNvZGUgIT09IFwiV0dTODRcIil7XG4gICAgc2VsZi5kYXR1bUNvZGUgPSBzZWxmLmRhdHVtQ29kZS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgcGFyc2VTdHJpbmc7XG5cbnZhciBORVVUUkFMID0gMTtcbnZhciBLRVlXT1JEID0gMjtcbnZhciBOVU1CRVIgPSAzO1xudmFyIFFVT1RFRCA9IDQ7XG52YXIgQUZURVJRVU9URSA9IDU7XG52YXIgRU5ERUQgPSAtMTtcbnZhciB3aGl0ZXNwYWNlID0gL1xccy87XG52YXIgbGF0aW4gPSAvW0EtWmEtel0vO1xudmFyIGtleXdvcmQgPSAvW0EtWmEtejg0XS87XG52YXIgZW5kVGhpbmdzID0gL1ssXFxdXS87XG52YXIgZGlnZXRzID0gL1tcXGRcXC5FXFwtXFwrXS87XG4vLyBjb25zdCBpZ25vcmVkQ2hhciA9IC9bXFxzX1xcLVxcL1xcKFxcKV0vZztcbmZ1bmN0aW9uIFBhcnNlcih0ZXh0KSB7XG4gIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBhIHN0cmluZycpO1xuICB9XG4gIHRoaXMudGV4dCA9IHRleHQudHJpbSgpO1xuICB0aGlzLmxldmVsID0gMDtcbiAgdGhpcy5wbGFjZSA9IDA7XG4gIHRoaXMucm9vdCA9IG51bGw7XG4gIHRoaXMuc3RhY2sgPSBbXTtcbiAgdGhpcy5jdXJyZW50T2JqZWN0ID0gbnVsbDtcbiAgdGhpcy5zdGF0ZSA9IE5FVVRSQUw7XG59XG5QYXJzZXIucHJvdG90eXBlLnJlYWRDaGFyaWN0ZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNoYXIgPSB0aGlzLnRleHRbdGhpcy5wbGFjZSsrXTtcbiAgaWYgKHRoaXMuc3RhdGUgIT09IFFVT1RFRCkge1xuICAgIHdoaWxlICh3aGl0ZXNwYWNlLnRlc3QoY2hhcikpIHtcbiAgICAgIGlmICh0aGlzLnBsYWNlID49IHRoaXMudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2hhciA9IHRoaXMudGV4dFt0aGlzLnBsYWNlKytdO1xuICAgIH1cbiAgfVxuICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICBjYXNlIE5FVVRSQUw6XG4gICAgICByZXR1cm4gdGhpcy5uZXV0cmFsKGNoYXIpO1xuICAgIGNhc2UgS0VZV09SRDpcbiAgICAgIHJldHVybiB0aGlzLmtleXdvcmQoY2hhcilcbiAgICBjYXNlIFFVT1RFRDpcbiAgICAgIHJldHVybiB0aGlzLnF1b3RlZChjaGFyKTtcbiAgICBjYXNlIEFGVEVSUVVPVEU6XG4gICAgICByZXR1cm4gdGhpcy5hZnRlcnF1b3RlKGNoYXIpO1xuICAgIGNhc2UgTlVNQkVSOlxuICAgICAgcmV0dXJuIHRoaXMubnVtYmVyKGNoYXIpO1xuICAgIGNhc2UgRU5ERUQ6XG4gICAgICByZXR1cm47XG4gIH1cbn07XG5QYXJzZXIucHJvdG90eXBlLmFmdGVycXVvdGUgPSBmdW5jdGlvbihjaGFyKSB7XG4gIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgdGhpcy53b3JkICs9ICdcIic7XG4gICAgdGhpcy5zdGF0ZSA9IFFVT1RFRDtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVuZFRoaW5ncy50ZXN0KGNoYXIpKSB7XG4gICAgdGhpcy53b3JkID0gdGhpcy53b3JkLnRyaW0oKTtcbiAgICB0aGlzLmFmdGVySXRlbShjaGFyKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdoYXZuXFwndCBoYW5kbGVkIFwiJyArY2hhciArICdcIiBpbiBhZnRlcnF1b3RlIHlldCwgaW5kZXggJyArIHRoaXMucGxhY2UpO1xufTtcblBhcnNlci5wcm90b3R5cGUuYWZ0ZXJJdGVtID0gZnVuY3Rpb24oY2hhcikge1xuICBpZiAoY2hhciA9PT0gJywnKSB7XG4gICAgaWYgKHRoaXMud29yZCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50T2JqZWN0LnB1c2godGhpcy53b3JkKTtcbiAgICB9XG4gICAgdGhpcy53b3JkID0gbnVsbDtcbiAgICB0aGlzLnN0YXRlID0gTkVVVFJBTDtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGNoYXIgPT09ICddJykge1xuICAgIHRoaXMubGV2ZWwtLTtcbiAgICBpZiAodGhpcy53b3JkICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPYmplY3QucHVzaCh0aGlzLndvcmQpO1xuICAgICAgdGhpcy53b3JkID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IE5FVVRSQUw7XG4gICAgdGhpcy5jdXJyZW50T2JqZWN0ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICBpZiAoIXRoaXMuY3VycmVudE9iamVjdCkge1xuICAgICAgdGhpcy5zdGF0ZSA9IEVOREVEO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxufTtcblBhcnNlci5wcm90b3R5cGUubnVtYmVyID0gZnVuY3Rpb24oY2hhcikge1xuICBpZiAoZGlnZXRzLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLndvcmQgKz0gY2hhcjtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVuZFRoaW5ncy50ZXN0KGNoYXIpKSB7XG4gICAgdGhpcy53b3JkID0gcGFyc2VGbG9hdCh0aGlzLndvcmQpO1xuICAgIHRoaXMuYWZ0ZXJJdGVtKGNoYXIpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2hhdm5cXCd0IGhhbmRsZWQgXCInICtjaGFyICsgJ1wiIGluIG51bWJlciB5ZXQsIGluZGV4ICcgKyB0aGlzLnBsYWNlKTtcbn07XG5QYXJzZXIucHJvdG90eXBlLnF1b3RlZCA9IGZ1bmN0aW9uKGNoYXIpIHtcbiAgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICB0aGlzLnN0YXRlID0gQUZURVJRVU9URTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy53b3JkICs9IGNoYXI7XG4gIHJldHVybjtcbn07XG5QYXJzZXIucHJvdG90eXBlLmtleXdvcmQgPSBmdW5jdGlvbihjaGFyKSB7XG4gIGlmIChrZXl3b3JkLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLndvcmQgKz0gY2hhcjtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGNoYXIgPT09ICdbJykge1xuICAgIHZhciBuZXdPYmplY3RzID0gW107XG4gICAgbmV3T2JqZWN0cy5wdXNoKHRoaXMud29yZCk7XG4gICAgdGhpcy5sZXZlbCsrO1xuICAgIGlmICh0aGlzLnJvb3QgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucm9vdCA9IG5ld09iamVjdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudE9iamVjdC5wdXNoKG5ld09iamVjdHMpO1xuICAgIH1cbiAgICB0aGlzLnN0YWNrLnB1c2godGhpcy5jdXJyZW50T2JqZWN0KTtcbiAgICB0aGlzLmN1cnJlbnRPYmplY3QgPSBuZXdPYmplY3RzO1xuICAgIHRoaXMuc3RhdGUgPSBORVVUUkFMO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZW5kVGhpbmdzLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLmFmdGVySXRlbShjaGFyKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdoYXZuXFwndCBoYW5kbGVkIFwiJyArY2hhciArICdcIiBpbiBrZXl3b3JkIHlldCwgaW5kZXggJyArIHRoaXMucGxhY2UpO1xufTtcblBhcnNlci5wcm90b3R5cGUubmV1dHJhbCA9IGZ1bmN0aW9uKGNoYXIpIHtcbiAgaWYgKGxhdGluLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLndvcmQgPSBjaGFyO1xuICAgIHRoaXMuc3RhdGUgPSBLRVlXT1JEO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgIHRoaXMud29yZCA9ICcnO1xuICAgIHRoaXMuc3RhdGUgPSBRVU9URUQ7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChkaWdldHMudGVzdChjaGFyKSkge1xuICAgIHRoaXMud29yZCA9IGNoYXI7XG4gICAgdGhpcy5zdGF0ZSA9IE5VTUJFUjtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVuZFRoaW5ncy50ZXN0KGNoYXIpKSB7XG4gICAgdGhpcy5hZnRlckl0ZW0oY2hhcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignaGF2blxcJ3QgaGFuZGxlZCBcIicgK2NoYXIgKyAnXCIgaW4gbmV1dHJhbCB5ZXQsIGluZGV4ICcgKyB0aGlzLnBsYWNlKTtcbn07XG5QYXJzZXIucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uKCkge1xuICB3aGlsZSAodGhpcy5wbGFjZSA8IHRoaXMudGV4dC5sZW5ndGgpIHtcbiAgICB0aGlzLnJlYWRDaGFyaWN0ZXIoKTtcbiAgfVxuICBpZiAodGhpcy5zdGF0ZSA9PT0gRU5ERUQpIHtcbiAgICByZXR1cm4gdGhpcy5yb290O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIHBhcnNlIHN0cmluZyBcIicgK3RoaXMudGV4dCArICdcIi4gU3RhdGUgaXMgJyArIHRoaXMuc3RhdGUpO1xufTtcblxuZnVuY3Rpb24gcGFyc2VTdHJpbmcodHh0KSB7XG4gIHZhciBwYXJzZXIgPSBuZXcgUGFyc2VyKHR4dCk7XG4gIHJldHVybiBwYXJzZXIub3V0cHV0KCk7XG59XG4iLCJcblxuZnVuY3Rpb24gbWFwaXQob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICB2YWx1ZS51bnNoaWZ0KGtleSk7XG4gICAga2V5ID0gbnVsbDtcbiAgfVxuICB2YXIgdGhpbmcgPSBrZXkgPyB7fSA6IG9iajtcblxuICB2YXIgb3V0ID0gdmFsdWUucmVkdWNlKGZ1bmN0aW9uKG5ld09iaiwgaXRlbSkge1xuICAgIHNFeHByKGl0ZW0sIG5ld09iaik7XG4gICAgcmV0dXJuIG5ld09ialxuICB9LCB0aGluZyk7XG4gIGlmIChrZXkpIHtcbiAgICBvYmpba2V5XSA9IG91dDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc0V4cHIodiwgb2JqKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2KSkge1xuICAgIG9ialt2XSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBrZXkgPSB2LnNoaWZ0KCk7XG4gIGlmIChrZXkgPT09ICdQQVJBTUVURVInKSB7XG4gICAga2V5ID0gdi5zaGlmdCgpO1xuICB9XG4gIGlmICh2Lmxlbmd0aCA9PT0gMSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZbMF0pKSB7XG4gICAgICBvYmpba2V5XSA9IHt9O1xuICAgICAgc0V4cHIodlswXSwgb2JqW2tleV0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvYmpba2V5XSA9IHZbMF07XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdi5sZW5ndGgpIHtcbiAgICBvYmpba2V5XSA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChrZXkgPT09ICdUT1dHUzg0Jykge1xuICAgIG9ialtrZXldID0gdjtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGtleSA9PT0gJ0FYSVMnKSB7XG4gICAgaWYgKCEoa2V5IGluIG9iaikpIHtcbiAgICAgIG9ialtrZXldID0gW107XG4gICAgfVxuICAgIG9ialtrZXldLnB1c2godik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgb2JqW2tleV0gPSB7fTtcbiAgfVxuXG4gIHZhciBpO1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ1VOSVQnOlxuICAgIGNhc2UgJ1BSSU1FTSc6XG4gICAgY2FzZSAnVkVSVF9EQVRVTSc6XG4gICAgICBvYmpba2V5XSA9IHtcbiAgICAgICAgbmFtZTogdlswXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBjb252ZXJ0OiB2WzFdXG4gICAgICB9O1xuICAgICAgaWYgKHYubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHNFeHByKHZbMl0sIG9ialtrZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdTUEhFUk9JRCc6XG4gICAgY2FzZSAnRUxMSVBTT0lEJzpcbiAgICAgIG9ialtrZXldID0ge1xuICAgICAgICBuYW1lOiB2WzBdLFxuICAgICAgICBhOiB2WzFdLFxuICAgICAgICByZjogdlsyXVxuICAgICAgfTtcbiAgICAgIGlmICh2Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICBzRXhwcih2WzNdLCBvYmpba2V5XSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnUFJPSkVDVEVEQ1JTJzpcbiAgICBjYXNlICdQUk9KQ1JTJzpcbiAgICBjYXNlICdHRU9HQ1MnOlxuICAgIGNhc2UgJ0dFT0NDUyc6XG4gICAgY2FzZSAnUFJPSkNTJzpcbiAgICBjYXNlICdMT0NBTF9DUyc6XG4gICAgY2FzZSAnR0VPRENSUyc6XG4gICAgY2FzZSAnR0VPREVUSUNDUlMnOlxuICAgIGNhc2UgJ0dFT0RFVElDREFUVU0nOlxuICAgIGNhc2UgJ0VEQVRVTSc6XG4gICAgY2FzZSAnRU5HSU5FRVJJTkdEQVRVTSc6XG4gICAgY2FzZSAnVkVSVF9DUyc6XG4gICAgY2FzZSAnVkVSVENSUyc6XG4gICAgY2FzZSAnVkVSVElDQUxDUlMnOlxuICAgIGNhc2UgJ0NPTVBEX0NTJzpcbiAgICBjYXNlICdDT01QT1VORENSUyc6XG4gICAgY2FzZSAnRU5HSU5FRVJJTkdDUlMnOlxuICAgIGNhc2UgJ0VOR0NSUyc6XG4gICAgY2FzZSAnRklUVEVEX0NTJzpcbiAgICBjYXNlICdMT0NBTF9EQVRVTSc6XG4gICAgY2FzZSAnREFUVU0nOlxuICAgICAgdlswXSA9IFsnbmFtZScsIHZbMF1dO1xuICAgICAgbWFwaXQob2JqLCBrZXksIHYpO1xuICAgICAgcmV0dXJuO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpID0gLTE7XG4gICAgICB3aGlsZSAoKytpIDwgdi5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIHNFeHByKHYsIG9ialtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1hcGl0KG9iaiwga2V5LCB2KTtcbiAgfVxufVxuIiwidmFyIEQyUiA9IDAuMDE3NDUzMjkyNTE5OTQzMjk1Nzc7XG5pbXBvcnQgcGFyc2VyIGZyb20gJy4vcGFyc2VyJztcbmltcG9ydCB7c0V4cHJ9IGZyb20gJy4vcHJvY2Vzcyc7XG5cblxuXG5mdW5jdGlvbiByZW5hbWUob2JqLCBwYXJhbXMpIHtcbiAgdmFyIG91dE5hbWUgPSBwYXJhbXNbMF07XG4gIHZhciBpbk5hbWUgPSBwYXJhbXNbMV07XG4gIGlmICghKG91dE5hbWUgaW4gb2JqKSAmJiAoaW5OYW1lIGluIG9iaikpIHtcbiAgICBvYmpbb3V0TmFtZV0gPSBvYmpbaW5OYW1lXTtcbiAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMykge1xuICAgICAgb2JqW291dE5hbWVdID0gcGFyYW1zWzJdKG9ialtvdXROYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGQycihpbnB1dCkge1xuICByZXR1cm4gaW5wdXQgKiBEMlI7XG59XG5cbmZ1bmN0aW9uIGNsZWFuV0tUKHdrdCkge1xuICBpZiAod2t0LnR5cGUgPT09ICdHRU9HQ1MnKSB7XG4gICAgd2t0LnByb2pOYW1lID0gJ2xvbmdsYXQnO1xuICB9IGVsc2UgaWYgKHdrdC50eXBlID09PSAnTE9DQUxfQ1MnKSB7XG4gICAgd2t0LnByb2pOYW1lID0gJ2lkZW50aXR5JztcbiAgICB3a3QubG9jYWwgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2Ygd2t0LlBST0pFQ1RJT04gPT09ICdvYmplY3QnKSB7XG4gICAgICB3a3QucHJvak5hbWUgPSBPYmplY3Qua2V5cyh3a3QuUFJPSkVDVElPTilbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHdrdC5wcm9qTmFtZSA9IHdrdC5QUk9KRUNUSU9OO1xuICAgIH1cbiAgfVxuICBpZiAod2t0LkFYSVMpIHtcbiAgICB2YXIgYXhpc09yZGVyID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gd2t0LkFYSVMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgdmFyIGF4aXMgPSB3a3QuQVhJU1tpXTtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gYXhpc1swXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGRlc2NyaXB0b3IuaW5kZXhPZignbm9ydGgnKSAhPT0gLTEpIHtcbiAgICAgICAgYXhpc09yZGVyICs9ICduJztcbiAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5pbmRleE9mKCdzb3V0aCcpICE9PSAtMSkge1xuICAgICAgICBheGlzT3JkZXIgKz0gJ3MnO1xuICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmluZGV4T2YoJ2Vhc3QnKSAhPT0gLTEpIHtcbiAgICAgICAgYXhpc09yZGVyICs9ICdlJztcbiAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRvci5pbmRleE9mKCd3ZXN0JykgIT09IC0xKSB7XG4gICAgICAgIGF4aXNPcmRlciArPSAndyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChheGlzT3JkZXIubGVuZ3RoID09PSAyKSB7XG4gICAgICBheGlzT3JkZXIgKz0gJ3UnO1xuICAgIH1cbiAgICBpZiAoYXhpc09yZGVyLmxlbmd0aCA9PT0gMykge1xuICAgICAgd2t0LmF4aXMgPSBheGlzT3JkZXI7XG4gICAgfVxuICB9XG4gIGlmICh3a3QuVU5JVCkge1xuICAgIHdrdC51bml0cyA9IHdrdC5VTklULm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAod2t0LnVuaXRzID09PSAnbWV0cmUnKSB7XG4gICAgICB3a3QudW5pdHMgPSAnbWV0ZXInO1xuICAgIH1cbiAgICBpZiAod2t0LlVOSVQuY29udmVydCkge1xuICAgICAgaWYgKHdrdC50eXBlID09PSAnR0VPR0NTJykge1xuICAgICAgICBpZiAod2t0LkRBVFVNICYmIHdrdC5EQVRVTS5TUEhFUk9JRCkge1xuICAgICAgICAgIHdrdC50b19tZXRlciA9IHdrdC5VTklULmNvbnZlcnQqd2t0LkRBVFVNLlNQSEVST0lELmE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdrdC50b19tZXRlciA9IHdrdC5VTklULmNvbnZlcnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciBnZW9nY3MgPSB3a3QuR0VPR0NTO1xuICBpZiAod2t0LnR5cGUgPT09ICdHRU9HQ1MnKSB7XG4gICAgZ2VvZ2NzID0gd2t0O1xuICB9XG4gIGlmIChnZW9nY3MpIHtcbiAgICAvL2lmKHdrdC5HRU9HQ1MuUFJJTUVNJiZ3a3QuR0VPR0NTLlBSSU1FTS5jb252ZXJ0KXtcbiAgICAvLyAgd2t0LmZyb21fZ3JlZW53aWNoPXdrdC5HRU9HQ1MuUFJJTUVNLmNvbnZlcnQqRDJSO1xuICAgIC8vfVxuICAgIGlmIChnZW9nY3MuREFUVU0pIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSBnZW9nY3MuREFUVU0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gZ2VvZ2NzLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHdrdC5kYXR1bUNvZGUuc2xpY2UoMCwgMikgPT09ICdkXycpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSB3a3QuZGF0dW1Db2RlLnNsaWNlKDIpO1xuICAgIH1cbiAgICBpZiAod2t0LmRhdHVtQ29kZSA9PT0gJ25ld196ZWFsYW5kX2dlb2RldGljX2RhdHVtXzE5NDknIHx8IHdrdC5kYXR1bUNvZGUgPT09ICduZXdfemVhbGFuZF8xOTQ5Jykge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9ICduemdkNDknO1xuICAgIH1cbiAgICBpZiAod2t0LmRhdHVtQ29kZSA9PT0gJ3dnc18xOTg0JyB8fCB3a3QuZGF0dW1Db2RlID09PSAnd29ybGRfZ2VvZGV0aWNfc3lzdGVtXzE5ODQnKSB7XG4gICAgICBpZiAod2t0LlBST0pFQ1RJT04gPT09ICdNZXJjYXRvcl9BdXhpbGlhcnlfU3BoZXJlJykge1xuICAgICAgICB3a3Quc3BoZXJlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHdrdC5kYXR1bUNvZGUgPSAnd2dzODQnO1xuICAgIH1cbiAgICBpZiAod2t0LmRhdHVtQ29kZS5zbGljZSgtNikgPT09ICdfZmVycm8nKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gd2t0LmRhdHVtQ29kZS5zbGljZSgwLCAtIDYpO1xuICAgIH1cbiAgICBpZiAod2t0LmRhdHVtQ29kZS5zbGljZSgtOCkgPT09ICdfamFrYXJ0YScpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSB3a3QuZGF0dW1Db2RlLnNsaWNlKDAsIC0gOCk7XG4gICAgfVxuICAgIGlmICh+d2t0LmRhdHVtQ29kZS5pbmRleE9mKCdiZWxnZScpKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gJ3JuYjcyJztcbiAgICB9XG4gICAgaWYgKGdlb2djcy5EQVRVTSAmJiBnZW9nY3MuREFUVU0uU1BIRVJPSUQpIHtcbiAgICAgIHdrdC5lbGxwcyA9IGdlb2djcy5EQVRVTS5TUEhFUk9JRC5uYW1lLnJlcGxhY2UoJ18xOScsICcnKS5yZXBsYWNlKC9bQ2NdbGFya2VcXF8xOC8sICdjbHJrJyk7XG4gICAgICBpZiAod2t0LmVsbHBzLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgMTMpID09PSAnaW50ZXJuYXRpb25hbCcpIHtcbiAgICAgICAgd2t0LmVsbHBzID0gJ2ludGwnO1xuICAgICAgfVxuXG4gICAgICB3a3QuYSA9IGdlb2djcy5EQVRVTS5TUEhFUk9JRC5hO1xuICAgICAgd2t0LnJmID0gcGFyc2VGbG9hdChnZW9nY3MuREFUVU0uU1BIRVJPSUQucmYsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAoZ2VvZ2NzLkRBVFVNICYmIGdlb2djcy5EQVRVTS5UT1dHUzg0KSB7XG4gICAgICB3a3QuZGF0dW1fcGFyYW1zID0gZ2VvZ2NzLkRBVFVNLlRPV0dTODQ7XG4gICAgfVxuICAgIGlmICh+d2t0LmRhdHVtQ29kZS5pbmRleE9mKCdvc2diXzE5MzYnKSkge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9ICdvc2diMzYnO1xuICAgIH1cbiAgICBpZiAofndrdC5kYXR1bUNvZGUuaW5kZXhPZignb3NuaV8xOTUyJykpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSAnb3NuaTUyJztcbiAgICB9XG4gICAgaWYgKH53a3QuZGF0dW1Db2RlLmluZGV4T2YoJ3RtNjUnKVxuICAgICAgfHwgfndrdC5kYXR1bUNvZGUuaW5kZXhPZignZ2VvZGV0aWNfZGF0dW1fb2ZfMTk2NScpKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gJ2lyZTY1JztcbiAgICB9XG4gICAgaWYgKHdrdC5kYXR1bUNvZGUgPT09ICdjaDE5MDMrJykge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9ICdjaDE5MDMnO1xuICAgIH1cbiAgICBpZiAofndrdC5kYXR1bUNvZGUuaW5kZXhPZignaXNyYWVsJykpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSAnaXNyOTMnO1xuICAgIH1cbiAgfVxuICBpZiAod2t0LmIgJiYgIWlzRmluaXRlKHdrdC5iKSkge1xuICAgIHdrdC5iID0gd2t0LmE7XG4gIH1cblxuICBmdW5jdGlvbiB0b01ldGVyKGlucHV0KSB7XG4gICAgdmFyIHJhdGlvID0gd2t0LnRvX21ldGVyIHx8IDE7XG4gICAgcmV0dXJuIGlucHV0ICogcmF0aW87XG4gIH1cbiAgdmFyIHJlbmFtZXIgPSBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIHJlbmFtZSh3a3QsIGEpO1xuICB9O1xuICB2YXIgbGlzdCA9IFtcbiAgICBbJ3N0YW5kYXJkX3BhcmFsbGVsXzEnLCAnU3RhbmRhcmRfUGFyYWxsZWxfMSddLFxuICAgIFsnc3RhbmRhcmRfcGFyYWxsZWxfMicsICdTdGFuZGFyZF9QYXJhbGxlbF8yJ10sXG4gICAgWydmYWxzZV9lYXN0aW5nJywgJ0ZhbHNlX0Vhc3RpbmcnXSxcbiAgICBbJ2ZhbHNlX25vcnRoaW5nJywgJ0ZhbHNlX05vcnRoaW5nJ10sXG4gICAgWydjZW50cmFsX21lcmlkaWFuJywgJ0NlbnRyYWxfTWVyaWRpYW4nXSxcbiAgICBbJ2xhdGl0dWRlX29mX29yaWdpbicsICdMYXRpdHVkZV9PZl9PcmlnaW4nXSxcbiAgICBbJ2xhdGl0dWRlX29mX29yaWdpbicsICdDZW50cmFsX1BhcmFsbGVsJ10sXG4gICAgWydzY2FsZV9mYWN0b3InLCAnU2NhbGVfRmFjdG9yJ10sXG4gICAgWydrMCcsICdzY2FsZV9mYWN0b3InXSxcbiAgICBbJ2xhdGl0dWRlX29mX2NlbnRlcicsICdMYXRpdHVkZV9PZl9DZW50ZXInXSxcbiAgICBbJ2xhdGl0dWRlX29mX2NlbnRlcicsICdMYXRpdHVkZV9vZl9jZW50ZXInXSxcbiAgICBbJ2xhdDAnLCAnbGF0aXR1ZGVfb2ZfY2VudGVyJywgZDJyXSxcbiAgICBbJ2xvbmdpdHVkZV9vZl9jZW50ZXInLCAnTG9uZ2l0dWRlX09mX0NlbnRlciddLFxuICAgIFsnbG9uZ2l0dWRlX29mX2NlbnRlcicsICdMb25naXR1ZGVfb2ZfY2VudGVyJ10sXG4gICAgWydsb25nYycsICdsb25naXR1ZGVfb2ZfY2VudGVyJywgZDJyXSxcbiAgICBbJ3gwJywgJ2ZhbHNlX2Vhc3RpbmcnLCB0b01ldGVyXSxcbiAgICBbJ3kwJywgJ2ZhbHNlX25vcnRoaW5nJywgdG9NZXRlcl0sXG4gICAgWydsb25nMCcsICdjZW50cmFsX21lcmlkaWFuJywgZDJyXSxcbiAgICBbJ2xhdDAnLCAnbGF0aXR1ZGVfb2Zfb3JpZ2luJywgZDJyXSxcbiAgICBbJ2xhdDAnLCAnc3RhbmRhcmRfcGFyYWxsZWxfMScsIGQycl0sXG4gICAgWydsYXQxJywgJ3N0YW5kYXJkX3BhcmFsbGVsXzEnLCBkMnJdLFxuICAgIFsnbGF0MicsICdzdGFuZGFyZF9wYXJhbGxlbF8yJywgZDJyXSxcbiAgICBbJ2F6aW11dGgnLCAnQXppbXV0aCddLFxuICAgIFsnYWxwaGEnLCAnYXppbXV0aCcsIGQycl0sXG4gICAgWydzcnNDb2RlJywgJ25hbWUnXVxuICBdO1xuICBsaXN0LmZvckVhY2gocmVuYW1lcik7XG4gIGlmICghd2t0LmxvbmcwICYmIHdrdC5sb25nYyAmJiAod2t0LnByb2pOYW1lID09PSAnQWxiZXJzX0NvbmljX0VxdWFsX0FyZWEnIHx8IHdrdC5wcm9qTmFtZSA9PT0gJ0xhbWJlcnRfQXppbXV0aGFsX0VxdWFsX0FyZWEnKSkge1xuICAgIHdrdC5sb25nMCA9IHdrdC5sb25nYztcbiAgfVxuICBpZiAoIXdrdC5sYXRfdHMgJiYgd2t0LmxhdDEgJiYgKHdrdC5wcm9qTmFtZSA9PT0gJ1N0ZXJlb2dyYXBoaWNfU291dGhfUG9sZScgfHwgd2t0LnByb2pOYW1lID09PSAnUG9sYXIgU3RlcmVvZ3JhcGhpYyAodmFyaWFudCBCKScpKSB7XG4gICAgd2t0LmxhdDAgPSBkMnIod2t0LmxhdDEgPiAwID8gOTAgOiAtOTApO1xuICAgIHdrdC5sYXRfdHMgPSB3a3QubGF0MTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24od2t0KSB7XG4gIHZhciBsaXNwID0gcGFyc2VyKHdrdCk7XG4gIHZhciB0eXBlID0gbGlzcC5zaGlmdCgpO1xuICB2YXIgbmFtZSA9IGxpc3Auc2hpZnQoKTtcbiAgbGlzcC51bnNoaWZ0KFsnbmFtZScsIG5hbWVdKTtcbiAgbGlzcC51bnNoaWZ0KFsndHlwZScsIHR5cGVdKTtcbiAgdmFyIG9iaiA9IHt9O1xuICBzRXhwcihsaXNwLCBvYmopO1xuICBjbGVhbldLVChvYmopO1xuICByZXR1cm4gb2JqO1xufVxuIiwiaW1wb3J0IGdsb2JhbHMgZnJvbSAnLi9nbG9iYWwnO1xuaW1wb3J0IHBhcnNlUHJvaiBmcm9tICcuL3Byb2pTdHJpbmcnO1xuaW1wb3J0IHdrdCBmcm9tICd3a3QtcGFyc2VyJztcblxuZnVuY3Rpb24gZGVmcyhuYW1lKSB7XG4gIC8qZ2xvYmFsIGNvbnNvbGUqL1xuICB2YXIgdGhhdCA9IHRoaXM7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIGRlZiA9IGFyZ3VtZW50c1sxXTtcbiAgICBpZiAodHlwZW9mIGRlZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChkZWYuY2hhckF0KDApID09PSAnKycpIHtcbiAgICAgICAgZGVmc1tuYW1lXSA9IHBhcnNlUHJvaihhcmd1bWVudHNbMV0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGRlZnNbbmFtZV0gPSB3a3QoYXJndW1lbnRzWzFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVmc1tuYW1lXSA9IGRlZjtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gbmFtZS5tYXAoZnVuY3Rpb24odikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICAgIGRlZnMuYXBwbHkodGhhdCwgdik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVmcyh2KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG5hbWUgaW4gZGVmcykge1xuICAgICAgICByZXR1cm4gZGVmc1tuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoJ0VQU0cnIGluIG5hbWUpIHtcbiAgICAgIGRlZnNbJ0VQU0c6JyArIG5hbWUuRVBTR10gPSBuYW1lO1xuICAgIH1cbiAgICBlbHNlIGlmICgnRVNSSScgaW4gbmFtZSkge1xuICAgICAgZGVmc1snRVNSSTonICsgbmFtZS5FU1JJXSA9IG5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKCdJQVUyMDAwJyBpbiBuYW1lKSB7XG4gICAgICBkZWZzWydJQVUyMDAwOicgKyBuYW1lLklBVTIwMDBdID0gbmFtZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cblxufVxuZ2xvYmFscyhkZWZzKTtcbmV4cG9ydCBkZWZhdWx0IGRlZnM7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWZzKSB7XG4gIGRlZnMoJ0VQU0c6NDMyNicsIFwiK3RpdGxlPVdHUyA4NCAobG9uZy9sYXQpICtwcm9qPWxvbmdsYXQgK2VsbHBzPVdHUzg0ICtkYXR1bT1XR1M4NCArdW5pdHM9ZGVncmVlc1wiKTtcbiAgZGVmcygnRVBTRzo0MjY5JywgXCIrdGl0bGU9TkFEODMgKGxvbmcvbGF0KSArcHJvaj1sb25nbGF0ICthPTYzNzgxMzcuMCArYj02MzU2NzUyLjMxNDE0MDM2ICtlbGxwcz1HUlM4MCArZGF0dW09TkFEODMgK3VuaXRzPWRlZ3JlZXNcIik7XG4gIGRlZnMoJ0VQU0c6Mzg1NycsIFwiK3RpdGxlPVdHUyA4NCAvIFBzZXVkby1NZXJjYXRvciArcHJvaj1tZXJjICthPTYzNzgxMzcgK2I9NjM3ODEzNyArbGF0X3RzPTAuMCArbG9uXzA9MC4wICt4XzA9MC4wICt5XzA9MCAraz0xLjAgK3VuaXRzPW0gK25hZGdyaWRzPUBudWxsICtub19kZWZzXCIpO1xuXG4gIGRlZnMuV0dTODQgPSBkZWZzWydFUFNHOjQzMjYnXTtcbiAgZGVmc1snRVBTRzozNzg1J10gPSBkZWZzWydFUFNHOjM4NTcnXTsgLy8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0LCBvZmZpY2lhbCBjb2RlIGlzIDM4NTdcbiAgZGVmcy5HT09HTEUgPSBkZWZzWydFUFNHOjM4NTcnXTtcbiAgZGVmc1snRVBTRzo5MDA5MTMnXSA9IGRlZnNbJ0VQU0c6Mzg1NyddO1xuICBkZWZzWydFUFNHOjEwMjExMyddID0gZGVmc1snRVBTRzozODU3J107XG59XG4iLCJpbXBvcnQgZGVmcyBmcm9tICcuL2RlZnMnO1xuaW1wb3J0IHdrdCBmcm9tICd3a3QtcGFyc2VyJztcbmltcG9ydCBwcm9qU3RyIGZyb20gJy4vcHJvalN0cmluZyc7XG5pbXBvcnQgbWF0Y2ggZnJvbSAnLi9tYXRjaCc7XG5mdW5jdGlvbiB0ZXN0T2JqKGNvZGUpe1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnO1xufVxuZnVuY3Rpb24gdGVzdERlZihjb2RlKXtcbiAgcmV0dXJuIGNvZGUgaW4gZGVmcztcbn1cbiB2YXIgY29kZVdvcmRzID0gWydQUk9KRUNURURDUlMnLCAnUFJPSkNSUycsICdHRU9HQ1MnLCdHRU9DQ1MnLCdQUk9KQ1MnLCdMT0NBTF9DUycsICdHRU9EQ1JTJywgJ0dFT0RFVElDQ1JTJywgJ0dFT0RFVElDREFUVU0nLCAnRU5HQ1JTJywgJ0VOR0lORUVSSU5HQ1JTJ107XG5mdW5jdGlvbiB0ZXN0V0tUKGNvZGUpe1xuICByZXR1cm4gY29kZVdvcmRzLnNvbWUoZnVuY3Rpb24gKHdvcmQpIHtcbiAgICByZXR1cm4gY29kZS5pbmRleE9mKHdvcmQpID4gLTE7XG4gIH0pO1xufVxudmFyIGNvZGVzID0gWyczODU3JywgJzkwMDkxMycsICczNzg1JywgJzEwMjExMyddO1xuZnVuY3Rpb24gY2hlY2tNZXJjYXRvcihpdGVtKSB7XG4gIHZhciBhdXRoID0gbWF0Y2goaXRlbSwgJ2F1dGhvcml0eScpO1xuICBpZiAoIWF1dGgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGNvZGUgPSBtYXRjaChhdXRoLCAnZXBzZycpO1xuICByZXR1cm4gY29kZSAmJiBjb2Rlcy5pbmRleE9mKGNvZGUpID4gLTE7XG59XG5mdW5jdGlvbiBjaGVja1Byb2pTdHIoaXRlbSkge1xuICB2YXIgZXh0ID0gbWF0Y2goaXRlbSwgJ2V4dGVuc2lvbicpO1xuICBpZiAoIWV4dCkge1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gbWF0Y2goZXh0LCAncHJvajQnKTtcbn1cbmZ1bmN0aW9uIHRlc3RQcm9qKGNvZGUpe1xuICByZXR1cm4gY29kZVswXSA9PT0gJysnO1xufVxuZnVuY3Rpb24gcGFyc2UoY29kZSl7XG4gIGlmICh0ZXN0T2JqKGNvZGUpKSB7XG4gICAgLy9jaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIFdLVCBzdHJpbmdcbiAgICBpZiAodGVzdERlZihjb2RlKSkge1xuICAgICAgcmV0dXJuIGRlZnNbY29kZV07XG4gICAgfVxuICAgIGlmICh0ZXN0V0tUKGNvZGUpKSB7XG4gICAgICB2YXIgb3V0ID0gd2t0KGNvZGUpO1xuICAgICAgLy8gdGVzdCBvZiBzcGV0aWFsIGNhc2UsIGR1ZSB0byB0aGlzIGJlaW5nIGEgdmVyeSBjb21tb24gYW5kIG9mdGVuIG1hbGZvcm1lZFxuICAgICAgaWYgKGNoZWNrTWVyY2F0b3Iob3V0KSkge1xuICAgICAgICByZXR1cm4gZGVmc1snRVBTRzozODU3J107XG4gICAgICB9XG4gICAgICB2YXIgbWF5YmVQcm9qU3RyID0gY2hlY2tQcm9qU3RyKG91dCk7XG4gICAgICBpZiAobWF5YmVQcm9qU3RyKSB7XG4gICAgICAgIHJldHVybiBwcm9qU3RyKG1heWJlUHJvalN0cik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBpZiAodGVzdFByb2ooY29kZSkpIHtcbiAgICAgIHJldHVybiBwcm9qU3RyKGNvZGUpO1xuICAgIH1cbiAgfWVsc2V7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcGFyc2U7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb24gfHwge307XG4gIHZhciB2YWx1ZSwgcHJvcGVydHk7XG4gIGlmICghc291cmNlKSB7XG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICB9XG4gIGZvciAocHJvcGVydHkgaW4gc291cmNlKSB7XG4gICAgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHldO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlc3RpbmF0aW9uO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZWNjZW50LCBzaW5waGksIGNvc3BoaSkge1xuICB2YXIgY29uID0gZWNjZW50ICogc2lucGhpO1xuICByZXR1cm4gY29zcGhpIC8gKE1hdGguc3FydCgxIC0gY29uICogY29uKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDwwID8gLTEgOiAxO1xufSIsIlxuaW1wb3J0IHtUV09fUEksIFNQSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5pbXBvcnQgc2lnbiBmcm9tICcuL3NpZ24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiAoTWF0aC5hYnMoeCkgPD0gU1BJKSA/IHggOiAoeCAtIChzaWduKHgpICogVFdPX1BJKSk7XG59XG4iLCJpbXBvcnQge0hBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlY2NlbnQsIHBoaSwgc2lucGhpKSB7XG4gIHZhciBjb24gPSBlY2NlbnQgKiBzaW5waGk7XG4gIHZhciBjb20gPSAwLjUgKiBlY2NlbnQ7XG4gIGNvbiA9IE1hdGgucG93KCgoMSAtIGNvbikgLyAoMSArIGNvbikpLCBjb20pO1xuICByZXR1cm4gKE1hdGgudGFuKDAuNSAqIChIQUxGX1BJIC0gcGhpKSkgLyBjb24pO1xufVxuIiwiaW1wb3J0IHtIQUxGX1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZWNjZW50LCB0cykge1xuICB2YXIgZWNjbnRoID0gMC41ICogZWNjZW50O1xuICB2YXIgY29uLCBkcGhpO1xuICB2YXIgcGhpID0gSEFMRl9QSSAtIDIgKiBNYXRoLmF0YW4odHMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8PSAxNTsgaSsrKSB7XG4gICAgY29uID0gZWNjZW50ICogTWF0aC5zaW4ocGhpKTtcbiAgICBkcGhpID0gSEFMRl9QSSAtIDIgKiBNYXRoLmF0YW4odHMgKiAoTWF0aC5wb3coKCgxIC0gY29uKSAvICgxICsgY29uKSksIGVjY250aCkpKSAtIHBoaTtcbiAgICBwaGkgKz0gZHBoaTtcbiAgICBpZiAoTWF0aC5hYnMoZHBoaSkgPD0gMC4wMDAwMDAwMDAxKSB7XG4gICAgICByZXR1cm4gcGhpO1xuICAgIH1cbiAgfVxuICAvL2NvbnNvbGUubG9nKFwicGhpMnogaGFzIE5vQ29udmVyZ2VuY2VcIik7XG4gIHJldHVybiAtOTk5OTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAvL25vLW9wIGZvciBsb25nbGF0XG59XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHB0KSB7XG4gIHJldHVybiBwdDtcbn1cbmV4cG9ydCB7aWRlbnRpdHkgYXMgZm9yd2FyZH07XG5leHBvcnQge2lkZW50aXR5IGFzIGludmVyc2V9O1xuZXhwb3J0IHZhciBuYW1lcyA9IFtcImxvbmdsYXRcIiwgXCJpZGVudGl0eVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogaWRlbnRpdHksXG4gIGludmVyc2U6IGlkZW50aXR5LFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgbWVyYyBmcm9tIFwiLi9wcm9qZWN0aW9ucy9tZXJjXCI7XG5pbXBvcnQgbG9uZ2xhdCBmcm9tIFwiLi9wcm9qZWN0aW9ucy9sb25nbGF0XCI7XG52YXIgcHJvanMgPSBbbWVyYywgbG9uZ2xhdF07XG52YXIgbmFtZXMgPSB7fTtcbnZhciBwcm9qU3RvcmUgPSBbXTtcblxuZnVuY3Rpb24gYWRkKHByb2osIGkpIHtcbiAgdmFyIGxlbiA9IHByb2pTdG9yZS5sZW5ndGg7XG4gIGlmICghcHJvai5uYW1lcykge1xuICAgIGNvbnNvbGUubG9nKGkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb2pTdG9yZVtsZW5dID0gcHJvajtcbiAgcHJvai5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKG4pIHtcbiAgICBuYW1lc1tuLnRvTG93ZXJDYXNlKCldID0gbGVuO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCB7YWRkfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHR5cGVvZiBuYW1lc1tuXSAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvalN0b3JlW25hbWVzW25dXSkge1xuICAgIHJldHVybiBwcm9qU3RvcmVbbmFtZXNbbl1dO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydCgpIHtcbiAgcHJvanMuZm9yRWFjaChhZGQpO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICBzdGFydDogc3RhcnQsXG4gIGFkZDogYWRkLFxuICBnZXQ6IGdldFxufTtcbiIsImltcG9ydCBtc2ZueiBmcm9tICcuLi9jb21tb24vbXNmbnonO1xuXG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgdHNmbnogZnJvbSAnLi4vY29tbW9uL3RzZm56JztcbmltcG9ydCBwaGkyeiBmcm9tICcuLi9jb21tb24vcGhpMnonO1xuaW1wb3J0IHtGT1JUUEksIFIyRCwgRVBTTE4sIEhBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHZhciBjb24gPSB0aGlzLmIgLyB0aGlzLmE7XG4gIHRoaXMuZXMgPSAxIC0gY29uICogY29uO1xuICBpZighKCd4MCcgaW4gdGhpcykpe1xuICAgIHRoaXMueDAgPSAwO1xuICB9XG4gIGlmKCEoJ3kwJyBpbiB0aGlzKSl7XG4gICAgdGhpcy55MCA9IDA7XG4gIH1cbiAgdGhpcy5lID0gTWF0aC5zcXJ0KHRoaXMuZXMpO1xuICBpZiAodGhpcy5sYXRfdHMpIHtcbiAgICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICAgIHRoaXMuazAgPSBNYXRoLmNvcyh0aGlzLmxhdF90cyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5rMCA9IG1zZm56KHRoaXMuZSwgTWF0aC5zaW4odGhpcy5sYXRfdHMpLCBNYXRoLmNvcyh0aGlzLmxhdF90cykpO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAoIXRoaXMuazApIHtcbiAgICAgIGlmICh0aGlzLmspIHtcbiAgICAgICAgdGhpcy5rMCA9IHRoaXMuaztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmswID0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyogTWVyY2F0b3IgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICAvLyBjb252ZXJ0IHRvIHJhZGlhbnNcbiAgaWYgKGxhdCAqIFIyRCA+IDkwICYmIGxhdCAqIFIyRCA8IC05MCAmJiBsb24gKiBSMkQgPiAxODAgJiYgbG9uICogUjJEIDwgLTE4MCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHgsIHk7XG4gIGlmIChNYXRoLmFicyhNYXRoLmFicyhsYXQpIC0gSEFMRl9QSSkgPD0gRVBTTE4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBlbHNlIHtcbiAgICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICAgIHggPSB0aGlzLngwICsgdGhpcy5hICogdGhpcy5rMCAqIGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gICAgICB5ID0gdGhpcy55MCArIHRoaXMuYSAqIHRoaXMuazAgKiBNYXRoLmxvZyhNYXRoLnRhbihGT1JUUEkgKyAwLjUgKiBsYXQpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgc2lucGhpID0gTWF0aC5zaW4obGF0KTtcbiAgICAgIHZhciB0cyA9IHRzZm56KHRoaXMuZSwgbGF0LCBzaW5waGkpO1xuICAgICAgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiB0aGlzLmswICogYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgICAgIHkgPSB0aGlzLnkwIC0gdGhpcy5hICogdGhpcy5rMCAqIE1hdGgubG9nKHRzKTtcbiAgICB9XG4gICAgcC54ID0geDtcbiAgICBwLnkgPSB5O1xuICAgIHJldHVybiBwO1xuICB9XG59XG5cbi8qIE1lcmNhdG9yIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG5cbiAgdmFyIHggPSBwLnggLSB0aGlzLngwO1xuICB2YXIgeSA9IHAueSAtIHRoaXMueTA7XG4gIHZhciBsb24sIGxhdDtcblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBsYXQgPSBIQUxGX1BJIC0gMiAqIE1hdGguYXRhbihNYXRoLmV4cCgteSAvICh0aGlzLmEgKiB0aGlzLmswKSkpO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciB0cyA9IE1hdGguZXhwKC15IC8gKHRoaXMuYSAqIHRoaXMuazApKTtcbiAgICBsYXQgPSBwaGkyeih0aGlzLmUsIHRzKTtcbiAgICBpZiAobGF0ID09PSAtOTk5OSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIHggLyAodGhpcy5hICogdGhpcy5rMCkpO1xuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIk1lcmNhdG9yXCIsIFwiUG9wdWxhciBWaXN1YWxpc2F0aW9uIFBzZXVkbyBNZXJjYXRvclwiLCBcIk1lcmNhdG9yXzFTUFwiLCBcIk1lcmNhdG9yX0F1eGlsaWFyeV9TcGhlcmVcIiwgXCJtZXJjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJ2YXIgZXhwb3J0cyA9IHt9O1xuZXhwb3J0IHtleHBvcnRzIGFzIGRlZmF1bHR9O1xuZXhwb3J0cy5NRVJJVCA9IHtcbiAgYTogNjM3ODEzNy4wLFxuICByZjogMjk4LjI1NyxcbiAgZWxsaXBzZU5hbWU6IFwiTUVSSVQgMTk4M1wiXG59O1xuXG5leHBvcnRzLlNHUzg1ID0ge1xuICBhOiA2Mzc4MTM2LjAsXG4gIHJmOiAyOTguMjU3LFxuICBlbGxpcHNlTmFtZTogXCJTb3ZpZXQgR2VvZGV0aWMgU3lzdGVtIDg1XCJcbn07XG5cbmV4cG9ydHMuR1JTODAgPSB7XG4gIGE6IDYzNzgxMzcuMCxcbiAgcmY6IDI5OC4yNTcyMjIxMDEsXG4gIGVsbGlwc2VOYW1lOiBcIkdSUyAxOTgwKElVR0csIDE5ODApXCJcbn07XG5cbmV4cG9ydHMuSUFVNzYgPSB7XG4gIGE6IDYzNzgxNDAuMCxcbiAgcmY6IDI5OC4yNTcsXG4gIGVsbGlwc2VOYW1lOiBcIklBVSAxOTc2XCJcbn07XG5cbmV4cG9ydHMuYWlyeSA9IHtcbiAgYTogNjM3NzU2My4zOTYsXG4gIGI6IDYzNTYyNTYuOTEwLFxuICBlbGxpcHNlTmFtZTogXCJBaXJ5IDE4MzBcIlxufTtcblxuZXhwb3J0cy5BUEw0ID0ge1xuICBhOiA2Mzc4MTM3LFxuICByZjogMjk4LjI1LFxuICBlbGxpcHNlTmFtZTogXCJBcHBsLiBQaHlzaWNzLiAxOTY1XCJcbn07XG5cbmV4cG9ydHMuTldMOUQgPSB7XG4gIGE6IDYzNzgxNDUuMCxcbiAgcmY6IDI5OC4yNSxcbiAgZWxsaXBzZU5hbWU6IFwiTmF2YWwgV2VhcG9ucyBMYWIuLCAxOTY1XCJcbn07XG5cbmV4cG9ydHMubW9kX2FpcnkgPSB7XG4gIGE6IDYzNzczNDAuMTg5LFxuICBiOiA2MzU2MDM0LjQ0NixcbiAgZWxsaXBzZU5hbWU6IFwiTW9kaWZpZWQgQWlyeVwiXG59O1xuXG5leHBvcnRzLmFuZHJhZSA9IHtcbiAgYTogNjM3NzEwNC40MyxcbiAgcmY6IDMwMC4wLFxuICBlbGxpcHNlTmFtZTogXCJBbmRyYWUgMTg3NiAoRGVuLiwgSWNsbmQuKVwiXG59O1xuXG5leHBvcnRzLmF1c3RfU0EgPSB7XG4gIGE6IDYzNzgxNjAuMCxcbiAgcmY6IDI5OC4yNSxcbiAgZWxsaXBzZU5hbWU6IFwiQXVzdHJhbGlhbiBOYXRsICYgUy4gQW1lci4gMTk2OVwiXG59O1xuXG5leHBvcnRzLkdSUzY3ID0ge1xuICBhOiA2Mzc4MTYwLjAsXG4gIHJmOiAyOTguMjQ3MTY3NDI3MCxcbiAgZWxsaXBzZU5hbWU6IFwiR1JTIDY3KElVR0cgMTk2NylcIlxufTtcblxuZXhwb3J0cy5iZXNzZWwgPSB7XG4gIGE6IDYzNzczOTcuMTU1LFxuICByZjogMjk5LjE1MjgxMjgsXG4gIGVsbGlwc2VOYW1lOiBcIkJlc3NlbCAxODQxXCJcbn07XG5cbmV4cG9ydHMuYmVzc19uYW0gPSB7XG4gIGE6IDYzNzc0ODMuODY1LFxuICByZjogMjk5LjE1MjgxMjgsXG4gIGVsbGlwc2VOYW1lOiBcIkJlc3NlbCAxODQxIChOYW1pYmlhKVwiXG59O1xuXG5leHBvcnRzLmNscms2NiA9IHtcbiAgYTogNjM3ODIwNi40LFxuICBiOiA2MzU2NTgzLjgsXG4gIGVsbGlwc2VOYW1lOiBcIkNsYXJrZSAxODY2XCJcbn07XG5cbmV4cG9ydHMuY2xyazgwID0ge1xuICBhOiA2Mzc4MjQ5LjE0NSxcbiAgcmY6IDI5My40NjYzLFxuICBlbGxpcHNlTmFtZTogXCJDbGFya2UgMTg4MCBtb2QuXCJcbn07XG5cbmV4cG9ydHMuY2xyazU4ID0ge1xuICBhOiA2Mzc4MjkzLjY0NTIwODc1OSxcbiAgcmY6IDI5NC4yNjA2NzYzNjkyNjU0LFxuICBlbGxpcHNlTmFtZTogXCJDbGFya2UgMTg1OFwiXG59O1xuXG5leHBvcnRzLkNQTSA9IHtcbiAgYTogNjM3NTczOC43LFxuICByZjogMzM0LjI5LFxuICBlbGxpcHNlTmFtZTogXCJDb21tLiBkZXMgUG9pZHMgZXQgTWVzdXJlcyAxNzk5XCJcbn07XG5cbmV4cG9ydHMuZGVsbWJyID0ge1xuICBhOiA2Mzc2NDI4LjAsXG4gIHJmOiAzMTEuNSxcbiAgZWxsaXBzZU5hbWU6IFwiRGVsYW1icmUgMTgxMCAoQmVsZ2l1bSlcIlxufTtcblxuZXhwb3J0cy5lbmdlbGlzID0ge1xuICBhOiA2Mzc4MTM2LjA1LFxuICByZjogMjk4LjI1NjYsXG4gIGVsbGlwc2VOYW1lOiBcIkVuZ2VsaXMgMTk4NVwiXG59O1xuXG5leHBvcnRzLmV2cnN0MzAgPSB7XG4gIGE6IDYzNzcyNzYuMzQ1LFxuICByZjogMzAwLjgwMTcsXG4gIGVsbGlwc2VOYW1lOiBcIkV2ZXJlc3QgMTgzMFwiXG59O1xuXG5leHBvcnRzLmV2cnN0NDggPSB7XG4gIGE6IDYzNzczMDQuMDYzLFxuICByZjogMzAwLjgwMTcsXG4gIGVsbGlwc2VOYW1lOiBcIkV2ZXJlc3QgMTk0OFwiXG59O1xuXG5leHBvcnRzLmV2cnN0NTYgPSB7XG4gIGE6IDYzNzczMDEuMjQzLFxuICByZjogMzAwLjgwMTcsXG4gIGVsbGlwc2VOYW1lOiBcIkV2ZXJlc3QgMTk1NlwiXG59O1xuXG5leHBvcnRzLmV2cnN0NjkgPSB7XG4gIGE6IDYzNzcyOTUuNjY0LFxuICByZjogMzAwLjgwMTcsXG4gIGVsbGlwc2VOYW1lOiBcIkV2ZXJlc3QgMTk2OVwiXG59O1xuXG5leHBvcnRzLmV2cnN0U1MgPSB7XG4gIGE6IDYzNzcyOTguNTU2LFxuICByZjogMzAwLjgwMTcsXG4gIGVsbGlwc2VOYW1lOiBcIkV2ZXJlc3QgKFNhYmFoICYgU2FyYXdhaylcIlxufTtcblxuZXhwb3J0cy5mc2NocjYwID0ge1xuICBhOiA2Mzc4MTY2LjAsXG4gIHJmOiAyOTguMyxcbiAgZWxsaXBzZU5hbWU6IFwiRmlzY2hlciAoTWVyY3VyeSBEYXR1bSkgMTk2MFwiXG59O1xuXG5leHBvcnRzLmZzY2hyNjBtID0ge1xuICBhOiA2Mzc4MTU1LjAsXG4gIHJmOiAyOTguMyxcbiAgZWxsaXBzZU5hbWU6IFwiRmlzY2hlciAxOTYwXCJcbn07XG5cbmV4cG9ydHMuZnNjaHI2OCA9IHtcbiAgYTogNjM3ODE1MC4wLFxuICByZjogMjk4LjMsXG4gIGVsbGlwc2VOYW1lOiBcIkZpc2NoZXIgMTk2OFwiXG59O1xuXG5leHBvcnRzLmhlbG1lcnQgPSB7XG4gIGE6IDYzNzgyMDAuMCxcbiAgcmY6IDI5OC4zLFxuICBlbGxpcHNlTmFtZTogXCJIZWxtZXJ0IDE5MDZcIlxufTtcblxuZXhwb3J0cy5ob3VnaCA9IHtcbiAgYTogNjM3ODI3MC4wLFxuICByZjogMjk3LjAsXG4gIGVsbGlwc2VOYW1lOiBcIkhvdWdoXCJcbn07XG5cbmV4cG9ydHMuaW50bCA9IHtcbiAgYTogNjM3ODM4OC4wLFxuICByZjogMjk3LjAsXG4gIGVsbGlwc2VOYW1lOiBcIkludGVybmF0aW9uYWwgMTkwOSAoSGF5Zm9yZClcIlxufTtcblxuZXhwb3J0cy5rYXVsYSA9IHtcbiAgYTogNjM3ODE2My4wLFxuICByZjogMjk4LjI0LFxuICBlbGxpcHNlTmFtZTogXCJLYXVsYSAxOTYxXCJcbn07XG5cbmV4cG9ydHMubGVyY2ggPSB7XG4gIGE6IDYzNzgxMzkuMCxcbiAgcmY6IDI5OC4yNTcsXG4gIGVsbGlwc2VOYW1lOiBcIkxlcmNoIDE5NzlcIlxufTtcblxuZXhwb3J0cy5tcHJ0cyA9IHtcbiAgYTogNjM5NzMwMC4wLFxuICByZjogMTkxLjAsXG4gIGVsbGlwc2VOYW1lOiBcIk1hdXBlcnRpdXMgMTczOFwiXG59O1xuXG5leHBvcnRzLm5ld19pbnRsID0ge1xuICBhOiA2Mzc4MTU3LjUsXG4gIGI6IDYzNTY3NzIuMixcbiAgZWxsaXBzZU5hbWU6IFwiTmV3IEludGVybmF0aW9uYWwgMTk2N1wiXG59O1xuXG5leHBvcnRzLnBsZXNzaXMgPSB7XG4gIGE6IDYzNzY1MjMuMCxcbiAgcmY6IDYzNTU4NjMuMCxcbiAgZWxsaXBzZU5hbWU6IFwiUGxlc3NpcyAxODE3IChGcmFuY2UpXCJcbn07XG5cbmV4cG9ydHMua3Jhc3MgPSB7XG4gIGE6IDYzNzgyNDUuMCxcbiAgcmY6IDI5OC4zLFxuICBlbGxpcHNlTmFtZTogXCJLcmFzc292c2t5LCAxOTQyXCJcbn07XG5cbmV4cG9ydHMuU0Vhc2lhID0ge1xuICBhOiA2Mzc4MTU1LjAsXG4gIGI6IDYzNTY3NzMuMzIwNSxcbiAgZWxsaXBzZU5hbWU6IFwiU291dGhlYXN0IEFzaWFcIlxufTtcblxuZXhwb3J0cy53YWxiZWNrID0ge1xuICBhOiA2Mzc2ODk2LjAsXG4gIGI6IDYzNTU4MzQuODQ2NyxcbiAgZWxsaXBzZU5hbWU6IFwiV2FsYmVja1wiXG59O1xuXG5leHBvcnRzLldHUzYwID0ge1xuICBhOiA2Mzc4MTY1LjAsXG4gIHJmOiAyOTguMyxcbiAgZWxsaXBzZU5hbWU6IFwiV0dTIDYwXCJcbn07XG5cbmV4cG9ydHMuV0dTNjYgPSB7XG4gIGE6IDYzNzgxNDUuMCxcbiAgcmY6IDI5OC4yNSxcbiAgZWxsaXBzZU5hbWU6IFwiV0dTIDY2XCJcbn07XG5cbmV4cG9ydHMuV0dTNyA9IHtcbiAgYTogNjM3ODEzNS4wLFxuICByZjogMjk4LjI2LFxuICBlbGxpcHNlTmFtZTogXCJXR1MgNzJcIlxufTtcblxuZXhwb3J0IHZhciBXR1M4NCA9IGV4cG9ydHMuV0dTODQgPSB7XG4gIGE6IDYzNzgxMzcuMCxcbiAgcmY6IDI5OC4yNTcyMjM1NjMsXG4gIGVsbGlwc2VOYW1lOiBcIldHUyA4NFwiXG59O1xuXG5leHBvcnRzLnNwaGVyZSA9IHtcbiAgYTogNjM3MDk5Ny4wLFxuICBiOiA2MzcwOTk3LjAsXG4gIGVsbGlwc2VOYW1lOiBcIk5vcm1hbCBTcGhlcmUgKHI9NjM3MDk5NylcIlxufTtcbiIsInZhciBleHBvcnRzID0ge307XG5leHBvcnQge2V4cG9ydHMgYXMgZGVmYXVsdH07XG5leHBvcnRzLndnczg0ID0ge1xuICB0b3dnczg0OiBcIjAsMCwwXCIsXG4gIGVsbGlwc2U6IFwiV0dTODRcIixcbiAgZGF0dW1OYW1lOiBcIldHUzg0XCJcbn07XG5cbmV4cG9ydHMuY2gxOTAzID0ge1xuICB0b3dnczg0OiBcIjY3NC4zNzQsMTUuMDU2LDQwNS4zNDZcIixcbiAgZWxsaXBzZTogXCJiZXNzZWxcIixcbiAgZGF0dW1OYW1lOiBcInN3aXNzXCJcbn07XG5cbmV4cG9ydHMuZ2dyczg3ID0ge1xuICB0b3dnczg0OiBcIi0xOTkuODcsNzQuNzksMjQ2LjYyXCIsXG4gIGVsbGlwc2U6IFwiR1JTODBcIixcbiAgZGF0dW1OYW1lOiBcIkdyZWVrX0dlb2RldGljX1JlZmVyZW5jZV9TeXN0ZW1fMTk4N1wiXG59O1xuXG5leHBvcnRzLm5hZDgzID0ge1xuICB0b3dnczg0OiBcIjAsMCwwXCIsXG4gIGVsbGlwc2U6IFwiR1JTODBcIixcbiAgZGF0dW1OYW1lOiBcIk5vcnRoX0FtZXJpY2FuX0RhdHVtXzE5ODNcIlxufTtcblxuZXhwb3J0cy5uYWQyNyA9IHtcbiAgbmFkZ3JpZHM6IFwiQGNvbnVzLEBhbGFza2EsQG50djJfMC5nc2IsQG50djFfY2FuLmRhdFwiLFxuICBlbGxpcHNlOiBcImNscms2NlwiLFxuICBkYXR1bU5hbWU6IFwiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTkyN1wiXG59O1xuXG5leHBvcnRzLnBvdHNkYW0gPSB7XG4gIHRvd2dzODQ6IFwiNjA2LjAsMjMuMCw0MTMuMFwiLFxuICBlbGxpcHNlOiBcImJlc3NlbFwiLFxuICBkYXR1bU5hbWU6IFwiUG90c2RhbSBSYXVlbmJlcmcgMTk1MCBESEROXCJcbn07XG5cbmV4cG9ydHMuY2FydGhhZ2UgPSB7XG4gIHRvd2dzODQ6IFwiLTI2My4wLDYuMCw0MzEuMFwiLFxuICBlbGxpcHNlOiBcImNsYXJrODBcIixcbiAgZGF0dW1OYW1lOiBcIkNhcnRoYWdlIDE5MzQgVHVuaXNpYVwiXG59O1xuXG5leHBvcnRzLmhlcm1hbm5za29nZWwgPSB7XG4gIHRvd2dzODQ6IFwiNjUzLjAsLTIxMi4wLDQ0OS4wXCIsXG4gIGVsbGlwc2U6IFwiYmVzc2VsXCIsXG4gIGRhdHVtTmFtZTogXCJIZXJtYW5uc2tvZ2VsXCJcbn07XG5cbmV4cG9ydHMub3NuaTUyID0ge1xuICB0b3dnczg0OiBcIjQ4Mi41MzAsLTEzMC41OTYsNTY0LjU1NywtMS4wNDIsLTAuMjE0LC0wLjYzMSw4LjE1XCIsXG4gIGVsbGlwc2U6IFwiYWlyeVwiLFxuICBkYXR1bU5hbWU6IFwiSXJpc2ggTmF0aW9uYWxcIlxufTtcblxuZXhwb3J0cy5pcmU2NSA9IHtcbiAgdG93Z3M4NDogXCI0ODIuNTMwLC0xMzAuNTk2LDU2NC41NTcsLTEuMDQyLC0wLjIxNCwtMC42MzEsOC4xNVwiLFxuICBlbGxpcHNlOiBcIm1vZF9haXJ5XCIsXG4gIGRhdHVtTmFtZTogXCJJcmVsYW5kIDE5NjVcIlxufTtcblxuZXhwb3J0cy5yYXNzYWRpcmFuID0ge1xuICB0b3dnczg0OiBcIi0xMzMuNjMsLTE1Ny41LC0xNTguNjJcIixcbiAgZWxsaXBzZTogXCJpbnRsXCIsXG4gIGRhdHVtTmFtZTogXCJSYXNzYWRpcmFuXCJcbn07XG5cbmV4cG9ydHMubnpnZDQ5ID0ge1xuICB0b3dnczg0OiBcIjU5LjQ3LC01LjA0LDE4Ny40NCwwLjQ3LC0wLjEsMS4wMjQsLTQuNTk5M1wiLFxuICBlbGxpcHNlOiBcImludGxcIixcbiAgZGF0dW1OYW1lOiBcIk5ldyBaZWFsYW5kIEdlb2RldGljIERhdHVtIDE5NDlcIlxufTtcblxuZXhwb3J0cy5vc2diMzYgPSB7XG4gIHRvd2dzODQ6IFwiNDQ2LjQ0OCwtMTI1LjE1Nyw1NDIuMDYwLDAuMTUwMiwwLjI0NzAsMC44NDIxLC0yMC40ODk0XCIsXG4gIGVsbGlwc2U6IFwiYWlyeVwiLFxuICBkYXR1bU5hbWU6IFwiQWlyeSAxODMwXCJcbn07XG5cbmV4cG9ydHMuc19qdHNrID0ge1xuICB0b3dnczg0OiBcIjU4OSw3Niw0ODBcIixcbiAgZWxsaXBzZTogJ2Jlc3NlbCcsXG4gIGRhdHVtTmFtZTogJ1MtSlRTSyAoRmVycm8pJ1xufTtcblxuZXhwb3J0cy5iZWR1YXJhbSA9IHtcbiAgdG93Z3M4NDogJy0xMDYsLTg3LDE4OCcsXG4gIGVsbGlwc2U6ICdjbHJrODAnLFxuICBkYXR1bU5hbWU6ICdCZWR1YXJhbSdcbn07XG5cbmV4cG9ydHMuZ3VudW5nX3NlZ2FyYSA9IHtcbiAgdG93Z3M4NDogJy00MDMsNjg0LDQxJyxcbiAgZWxsaXBzZTogJ2Jlc3NlbCcsXG4gIGRhdHVtTmFtZTogJ0d1bnVuZyBTZWdhcmEgSmFrYXJ0YSdcbn07XG5cbmV4cG9ydHMucm5iNzIgPSB7XG4gIHRvd2dzODQ6IFwiMTA2Ljg2OSwtNTIuMjk3OCwxMDMuNzI0LC0wLjMzNjU3LDAuNDU2OTU1LC0xLjg0MjE4LDFcIixcbiAgZWxsaXBzZTogXCJpbnRsXCIsXG4gIGRhdHVtTmFtZTogXCJSZXNlYXUgTmF0aW9uYWwgQmVsZ2UgMTk3MlwiXG59O1xuIiwiaW1wb3J0IHBhcnNlQ29kZSBmcm9tICcuL3BhcnNlQ29kZSc7XG5pbXBvcnQgZXh0ZW5kIGZyb20gJy4vZXh0ZW5kJztcbmltcG9ydCBwcm9qZWN0aW9ucyBmcm9tICcuL3Byb2plY3Rpb25zJztcbmltcG9ydCB7c3BoZXJlIGFzIGRjX3NwaGVyZSwgZWNjZW50cmljaXR5IGFzIGRjX2VjY2VudHJpY2l0eX0gZnJvbSAnLi9kZXJpdmVDb25zdGFudHMnO1xuaW1wb3J0IERhdHVtIGZyb20gJy4vY29uc3RhbnRzL0RhdHVtJztcbmltcG9ydCBkYXR1bSBmcm9tICcuL2RhdHVtJztcbmltcG9ydCBtYXRjaCBmcm9tICcuL21hdGNoJztcblxuZnVuY3Rpb24gUHJvamVjdGlvbihzcnNDb2RlLGNhbGxiYWNrKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9qZWN0aW9uKSkge1xuICAgIHJldHVybiBuZXcgUHJvamVjdGlvbihzcnNDb2RlKTtcbiAgfVxuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKGVycm9yKXtcbiAgICBpZihlcnJvcil7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG4gIHZhciBqc29uID0gcGFyc2VDb2RlKHNyc0NvZGUpO1xuICBpZih0eXBlb2YganNvbiAhPT0gJ29iamVjdCcpe1xuICAgIGNhbGxiYWNrKHNyc0NvZGUpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgb3VyUHJvaiA9IFByb2plY3Rpb24ucHJvamVjdGlvbnMuZ2V0KGpzb24ucHJvak5hbWUpO1xuICBpZighb3VyUHJvail7XG4gICAgY2FsbGJhY2soc3JzQ29kZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChqc29uLmRhdHVtQ29kZSAmJiBqc29uLmRhdHVtQ29kZSAhPT0gJ25vbmUnKSB7XG4gICAgdmFyIGRhdHVtRGVmID0gbWF0Y2goRGF0dW0sIGpzb24uZGF0dW1Db2RlKTtcbiAgICBpZiAoZGF0dW1EZWYpIHtcbiAgICAgIGpzb24uZGF0dW1fcGFyYW1zID0gZGF0dW1EZWYudG93Z3M4NCA/IGRhdHVtRGVmLnRvd2dzODQuc3BsaXQoJywnKSA6IG51bGw7XG4gICAgICBqc29uLmVsbHBzID0gZGF0dW1EZWYuZWxsaXBzZTtcbiAgICAgIGpzb24uZGF0dW1OYW1lID0gZGF0dW1EZWYuZGF0dW1OYW1lID8gZGF0dW1EZWYuZGF0dW1OYW1lIDoganNvbi5kYXR1bUNvZGU7XG4gICAgfVxuICB9XG4gIGpzb24uazAgPSBqc29uLmswIHx8IDEuMDtcbiAganNvbi5heGlzID0ganNvbi5heGlzIHx8ICdlbnUnO1xuICBqc29uLmVsbHBzID0ganNvbi5lbGxwcyB8fCAnd2dzODQnO1xuICB2YXIgc3BoZXJlXyA9IGRjX3NwaGVyZShqc29uLmEsIGpzb24uYiwganNvbi5yZiwganNvbi5lbGxwcywganNvbi5zcGhlcmUpO1xuICB2YXIgZWNjID0gZGNfZWNjZW50cmljaXR5KHNwaGVyZV8uYSwgc3BoZXJlXy5iLCBzcGhlcmVfLnJmLCBqc29uLlJfQSk7XG4gIHZhciBkYXR1bU9iaiA9IGpzb24uZGF0dW0gfHwgZGF0dW0oanNvbi5kYXR1bUNvZGUsIGpzb24uZGF0dW1fcGFyYW1zLCBzcGhlcmVfLmEsIHNwaGVyZV8uYiwgZWNjLmVzLCBlY2MuZXAyKTtcblxuICBleHRlbmQodGhpcywganNvbik7IC8vIHRyYW5zZmVyIGV2ZXJ5dGhpbmcgb3ZlciBmcm9tIHRoZSBwcm9qZWN0aW9uIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHdlJ2xsIG5lZWRcbiAgZXh0ZW5kKHRoaXMsIG91clByb2opOyAvLyB0cmFuc2ZlciBhbGwgdGhlIG1ldGhvZHMgZnJvbSB0aGUgcHJvamVjdGlvblxuXG4gIC8vIGNvcHkgdGhlIDQgdGhpbmdzIG92ZXIgd2UgY2FsdWxhdGVkIGluIGRlcml2ZUNvbnN0YW50cy5zcGhlcmVcbiAgdGhpcy5hID0gc3BoZXJlXy5hO1xuICB0aGlzLmIgPSBzcGhlcmVfLmI7XG4gIHRoaXMucmYgPSBzcGhlcmVfLnJmO1xuICB0aGlzLnNwaGVyZSA9IHNwaGVyZV8uc3BoZXJlO1xuXG4gIC8vIGNvcHkgdGhlIDMgdGhpbmdzIHdlIGNhbGN1bGF0ZWQgaW4gZGVyaXZlQ29uc3RhbnRzLmVjY2VudHJpY2l0eVxuICB0aGlzLmVzID0gZWNjLmVzO1xuICB0aGlzLmUgPSBlY2MuZTtcbiAgdGhpcy5lcDIgPSBlY2MuZXAyO1xuXG4gIC8vIGFkZCBpbiB0aGUgZGF0dW0gb2JqZWN0XG4gIHRoaXMuZGF0dW0gPSBkYXR1bU9iajtcblxuICAvLyBpbml0IHRoZSBwcm9qZWN0aW9uXG4gIHRoaXMuaW5pdCgpO1xuXG4gIC8vIGxlZ2VjeSBjYWxsYmFjayBmcm9tIGJhY2sgaW4gdGhlIGRheSB3aGVuIGl0IHdlbnQgdG8gc3BhdGlhbHJlZmVyZW5jZS5vcmdcbiAgY2FsbGJhY2sobnVsbCwgdGhpcyk7XG5cbn1cblByb2plY3Rpb24ucHJvamVjdGlvbnMgPSBwcm9qZWN0aW9ucztcblByb2plY3Rpb24ucHJvamVjdGlvbnMuc3RhcnQoKTtcbmV4cG9ydCBkZWZhdWx0IFByb2plY3Rpb247XG4iLCJpbXBvcnQge1NJWFRILCBSQTQsIFJBNiwgRVBTTE59IGZyb20gJy4vY29uc3RhbnRzL3ZhbHVlcyc7XG5pbXBvcnQge2RlZmF1bHQgYXMgRWxsaXBzb2lkLCBXR1M4NH0gZnJvbSAnLi9jb25zdGFudHMvRWxsaXBzb2lkJztcbmltcG9ydCBtYXRjaCBmcm9tICcuL21hdGNoJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVjY2VudHJpY2l0eShhLCBiLCByZiwgUl9BKSB7XG4gIHZhciBhMiA9IGEgKiBhOyAvLyB1c2VkIGluIGdlb2NlbnRyaWNcbiAgdmFyIGIyID0gYiAqIGI7IC8vIHVzZWQgaW4gZ2VvY2VudHJpY1xuICB2YXIgZXMgPSAoYTIgLSBiMikgLyBhMjsgLy8gZSBeIDJcbiAgdmFyIGUgPSAwO1xuICBpZiAoUl9BKSB7XG4gICAgYSAqPSAxIC0gZXMgKiAoU0lYVEggKyBlcyAqIChSQTQgKyBlcyAqIFJBNikpO1xuICAgIGEyID0gYSAqIGE7XG4gICAgZXMgPSAwO1xuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLnNxcnQoZXMpOyAvLyBlY2NlbnRyaWNpdHlcbiAgfVxuICB2YXIgZXAyID0gKGEyIC0gYjIpIC8gYjI7IC8vIHVzZWQgaW4gZ2VvY2VudHJpY1xuICByZXR1cm4ge1xuICAgIGVzOiBlcyxcbiAgICBlOiBlLFxuICAgIGVwMjogZXAyXG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gc3BoZXJlKGEsIGIsIHJmLCBlbGxwcywgc3BoZXJlKSB7XG4gIGlmICghYSkgeyAvLyBkbyB3ZSBoYXZlIGFuIGVsbGlwc29pZD9cbiAgICB2YXIgZWxsaXBzZSA9IG1hdGNoKEVsbGlwc29pZCwgZWxscHMpO1xuICAgIGlmICghZWxsaXBzZSkge1xuICAgICAgZWxsaXBzZSA9IFdHUzg0O1xuICAgIH1cbiAgICBhID0gZWxsaXBzZS5hO1xuICAgIGIgPSBlbGxpcHNlLmI7XG4gICAgcmYgPSBlbGxpcHNlLnJmO1xuICB9XG5cbiAgaWYgKHJmICYmICFiKSB7XG4gICAgYiA9ICgxLjAgLSAxLjAgLyByZikgKiBhO1xuICB9XG4gIGlmIChyZiA9PT0gMCB8fCBNYXRoLmFicyhhIC0gYikgPCBFUFNMTikge1xuICAgIHNwaGVyZSA9IHRydWU7XG4gICAgYiA9IGE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhOiBhLFxuICAgIGI6IGIsXG4gICAgcmY6IHJmLFxuICAgIHNwaGVyZTogc3BoZXJlXG4gIH07XG59XG4iLCJpbXBvcnQge1BKRF8zUEFSQU0sIFBKRF83UEFSQU0sIFBKRF9XR1M4NCwgUEpEX05PREFUVU0sIFNFQ19UT19SQUR9IGZyb20gJy4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmZ1bmN0aW9uIGRhdHVtKGRhdHVtQ29kZSwgZGF0dW1fcGFyYW1zLCBhLCBiLCBlcywgZXAyKSB7XG4gIHZhciBvdXQgPSB7fTtcblxuICBpZiAoZGF0dW1Db2RlID09PSB1bmRlZmluZWQgfHwgZGF0dW1Db2RlID09PSAnbm9uZScpIHtcbiAgICBvdXQuZGF0dW1fdHlwZSA9IFBKRF9OT0RBVFVNO1xuICB9IGVsc2Uge1xuICAgIG91dC5kYXR1bV90eXBlID0gUEpEX1dHUzg0O1xuICB9XG5cbiAgaWYgKGRhdHVtX3BhcmFtcykge1xuICAgIG91dC5kYXR1bV9wYXJhbXMgPSBkYXR1bV9wYXJhbXMubWFwKHBhcnNlRmxvYXQpO1xuICAgIGlmIChvdXQuZGF0dW1fcGFyYW1zWzBdICE9PSAwIHx8IG91dC5kYXR1bV9wYXJhbXNbMV0gIT09IDAgfHwgb3V0LmRhdHVtX3BhcmFtc1syXSAhPT0gMCkge1xuICAgICAgb3V0LmRhdHVtX3R5cGUgPSBQSkRfM1BBUkFNO1xuICAgIH1cbiAgICBpZiAob3V0LmRhdHVtX3BhcmFtcy5sZW5ndGggPiAzKSB7XG4gICAgICBpZiAob3V0LmRhdHVtX3BhcmFtc1szXSAhPT0gMCB8fCBvdXQuZGF0dW1fcGFyYW1zWzRdICE9PSAwIHx8IG91dC5kYXR1bV9wYXJhbXNbNV0gIT09IDAgfHwgb3V0LmRhdHVtX3BhcmFtc1s2XSAhPT0gMCkge1xuICAgICAgICBvdXQuZGF0dW1fdHlwZSA9IFBKRF83UEFSQU07XG4gICAgICAgIG91dC5kYXR1bV9wYXJhbXNbM10gKj0gU0VDX1RPX1JBRDtcbiAgICAgICAgb3V0LmRhdHVtX3BhcmFtc1s0XSAqPSBTRUNfVE9fUkFEO1xuICAgICAgICBvdXQuZGF0dW1fcGFyYW1zWzVdICo9IFNFQ19UT19SQUQ7XG4gICAgICAgIG91dC5kYXR1bV9wYXJhbXNbNl0gPSAob3V0LmRhdHVtX3BhcmFtc1s2XSAvIDEwMDAwMDAuMCkgKyAxLjA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3V0LmEgPSBhOyAvL2RhdHVtIG9iamVjdCBhbHNvIHVzZXMgdGhlc2UgdmFsdWVzXG4gIG91dC5iID0gYjtcbiAgb3V0LmVzID0gZXM7XG4gIG91dC5lcDIgPSBlcDI7XG4gIHJldHVybiBvdXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRhdHVtO1xuIiwiJ3VzZSBzdHJpY3QnO1xuaW1wb3J0IHtQSkRfM1BBUkFNLCBQSkRfN1BBUkFNLCBIQUxGX1BJfSBmcm9tICcuL2NvbnN0YW50cy92YWx1ZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEYXR1bXMoc291cmNlLCBkZXN0KSB7XG4gIGlmIChzb3VyY2UuZGF0dW1fdHlwZSAhPT0gZGVzdC5kYXR1bV90eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBmYWxzZSwgZGF0dW1zIGFyZSBub3QgZXF1YWxcbiAgfSBlbHNlIGlmIChzb3VyY2UuYSAhPT0gZGVzdC5hIHx8IE1hdGguYWJzKHNvdXJjZS5lcyAtIGRlc3QuZXMpID4gMC4wMDAwMDAwMDAwNTApIHtcbiAgICAvLyB0aGUgdG9sZXJhbmNlIGZvciBlcyBpcyB0byBlbnN1cmUgdGhhdCBHUlM4MCBhbmQgV0dTODRcbiAgICAvLyBhcmUgY29uc2lkZXJlZCBpZGVudGljYWxcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoc291cmNlLmRhdHVtX3R5cGUgPT09IFBKRF8zUEFSQU0pIHtcbiAgICByZXR1cm4gKHNvdXJjZS5kYXR1bV9wYXJhbXNbMF0gPT09IGRlc3QuZGF0dW1fcGFyYW1zWzBdICYmIHNvdXJjZS5kYXR1bV9wYXJhbXNbMV0gPT09IGRlc3QuZGF0dW1fcGFyYW1zWzFdICYmIHNvdXJjZS5kYXR1bV9wYXJhbXNbMl0gPT09IGRlc3QuZGF0dW1fcGFyYW1zWzJdKTtcbiAgfSBlbHNlIGlmIChzb3VyY2UuZGF0dW1fdHlwZSA9PT0gUEpEXzdQQVJBTSkge1xuICAgIHJldHVybiAoc291cmNlLmRhdHVtX3BhcmFtc1swXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMF0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1sxXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMV0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1syXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMl0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1szXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbM10gJiYgc291cmNlLmRhdHVtX3BhcmFtc1s0XSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbNF0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1s1XSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbNV0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1s2XSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbNl0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0cnVlOyAvLyBkYXR1bXMgYXJlIGVxdWFsXG4gIH1cbn0gLy8gY3NfY29tcGFyZV9kYXR1bXMoKVxuXG4vKlxuICogVGhlIGZ1bmN0aW9uIENvbnZlcnRfR2VvZGV0aWNfVG9fR2VvY2VudHJpYyBjb252ZXJ0cyBnZW9kZXRpYyBjb29yZGluYXRlc1xuICogKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFuZCBoZWlnaHQpIHRvIGdlb2NlbnRyaWMgY29vcmRpbmF0ZXMgKFgsIFksIFopLFxuICogYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGVsbGlwc29pZCBwYXJhbWV0ZXJzLlxuICpcbiAqICAgIExhdGl0dWRlICA6IEdlb2RldGljIGxhdGl0dWRlIGluIHJhZGlhbnMgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpXG4gKiAgICBMb25naXR1ZGUgOiBHZW9kZXRpYyBsb25naXR1ZGUgaW4gcmFkaWFucyAgICAgICAgICAgICAgICAgICAgKGlucHV0KVxuICogICAgSGVpZ2h0ICAgIDogR2VvZGV0aWMgaGVpZ2h0LCBpbiBtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dClcbiAqICAgIFggICAgICAgICA6IENhbGN1bGF0ZWQgR2VvY2VudHJpYyBYIGNvb3JkaW5hdGUsIGluIG1ldGVycyAgICAob3V0cHV0KVxuICogICAgWSAgICAgICAgIDogQ2FsY3VsYXRlZCBHZW9jZW50cmljIFkgY29vcmRpbmF0ZSwgaW4gbWV0ZXJzICAgIChvdXRwdXQpXG4gKiAgICBaICAgICAgICAgOiBDYWxjdWxhdGVkIEdlb2NlbnRyaWMgWiBjb29yZGluYXRlLCBpbiBtZXRlcnMgICAgKG91dHB1dClcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW9kZXRpY1RvR2VvY2VudHJpYyhwLCBlcywgYSkge1xuICB2YXIgTG9uZ2l0dWRlID0gcC54O1xuICB2YXIgTGF0aXR1ZGUgPSBwLnk7XG4gIHZhciBIZWlnaHQgPSBwLnogPyBwLnogOiAwOyAvL1ogdmFsdWUgbm90IGFsd2F5cyBzdXBwbGllZFxuXG4gIHZhciBSbjsgLyogIEVhcnRoIHJhZGl1cyBhdCBsb2NhdGlvbiAgKi9cbiAgdmFyIFNpbl9MYXQ7IC8qICBNYXRoLnNpbihMYXRpdHVkZSkgICovXG4gIHZhciBTaW4yX0xhdDsgLyogIFNxdWFyZSBvZiBNYXRoLnNpbihMYXRpdHVkZSkgICovXG4gIHZhciBDb3NfTGF0OyAvKiAgTWF0aC5jb3MoTGF0aXR1ZGUpICAqL1xuXG4gIC8qXG4gICAqKiBEb24ndCBibG93IHVwIGlmIExhdGl0dWRlIGlzIGp1c3QgYSBsaXR0bGUgb3V0IG9mIHRoZSB2YWx1ZVxuICAgKiogcmFuZ2UgYXMgaXQgbWF5IGp1c3QgYmUgYSByb3VuZGluZyBpc3N1ZS4gIEFsc28gcmVtb3ZlZCBsb25naXR1ZGVcbiAgICoqIHRlc3QsIGl0IHNob3VsZCBiZSB3cmFwcGVkIGJ5IE1hdGguY29zKCkgYW5kIE1hdGguc2luKCkuICBORlcgZm9yIFBST0ouNCwgU2VwLzIwMDEuXG4gICAqL1xuICBpZiAoTGF0aXR1ZGUgPCAtSEFMRl9QSSAmJiBMYXRpdHVkZSA+IC0xLjAwMSAqIEhBTEZfUEkpIHtcbiAgICBMYXRpdHVkZSA9IC1IQUxGX1BJO1xuICB9IGVsc2UgaWYgKExhdGl0dWRlID4gSEFMRl9QSSAmJiBMYXRpdHVkZSA8IDEuMDAxICogSEFMRl9QSSkge1xuICAgIExhdGl0dWRlID0gSEFMRl9QSTtcbiAgfSBlbHNlIGlmIChMYXRpdHVkZSA8IC1IQUxGX1BJKSB7XG4gICAgLyogTGF0aXR1ZGUgb3V0IG9mIHJhbmdlICovXG4gICAgLy8uLnJlcG9ydEVycm9yKCdnZW9jZW50OmxhdCBvdXQgb2YgcmFuZ2U6JyArIExhdGl0dWRlKTtcbiAgICByZXR1cm4geyB4OiAtSW5maW5pdHksIHk6IC1JbmZpbml0eSwgejogcC56IH07XG4gIH0gZWxzZSBpZiAoTGF0aXR1ZGUgPiBIQUxGX1BJKSB7XG4gICAgLyogTGF0aXR1ZGUgb3V0IG9mIHJhbmdlICovXG4gICAgcmV0dXJuIHsgeDogSW5maW5pdHksIHk6IEluZmluaXR5LCB6OiBwLnogfTtcbiAgfVxuXG4gIGlmIChMb25naXR1ZGUgPiBNYXRoLlBJKSB7XG4gICAgTG9uZ2l0dWRlIC09ICgyICogTWF0aC5QSSk7XG4gIH1cbiAgU2luX0xhdCA9IE1hdGguc2luKExhdGl0dWRlKTtcbiAgQ29zX0xhdCA9IE1hdGguY29zKExhdGl0dWRlKTtcbiAgU2luMl9MYXQgPSBTaW5fTGF0ICogU2luX0xhdDtcbiAgUm4gPSBhIC8gKE1hdGguc3FydCgxLjBlMCAtIGVzICogU2luMl9MYXQpKTtcbiAgcmV0dXJuIHtcbiAgICB4OiAoUm4gKyBIZWlnaHQpICogQ29zX0xhdCAqIE1hdGguY29zKExvbmdpdHVkZSksXG4gICAgeTogKFJuICsgSGVpZ2h0KSAqIENvc19MYXQgKiBNYXRoLnNpbihMb25naXR1ZGUpLFxuICAgIHo6ICgoUm4gKiAoMSAtIGVzKSkgKyBIZWlnaHQpICogU2luX0xhdFxuICB9O1xufSAvLyBjc19nZW9kZXRpY190b19nZW9jZW50cmljKClcblxuZXhwb3J0IGZ1bmN0aW9uIGdlb2NlbnRyaWNUb0dlb2RldGljKHAsIGVzLCBhLCBiKSB7XG4gIC8qIGxvY2FsIGRlZmludGlvbnMgYW5kIHZhcmlhYmxlcyAqL1xuICAvKiBlbmQtY3JpdGVyaXVtIG9mIGxvb3AsIGFjY3VyYWN5IG9mIHNpbihMYXRpdHVkZSkgKi9cbiAgdmFyIGdlbmF1ID0gMWUtMTI7XG4gIHZhciBnZW5hdTIgPSAoZ2VuYXUgKiBnZW5hdSk7XG4gIHZhciBtYXhpdGVyID0gMzA7XG5cbiAgdmFyIFA7IC8qIGRpc3RhbmNlIGJldHdlZW4gc2VtaS1taW5vciBheGlzIGFuZCBsb2NhdGlvbiAqL1xuICB2YXIgUlI7IC8qIGRpc3RhbmNlIGJldHdlZW4gY2VudGVyIGFuZCBsb2NhdGlvbiAqL1xuICB2YXIgQ1Q7IC8qIHNpbiBvZiBnZW9jZW50cmljIGxhdGl0dWRlICovXG4gIHZhciBTVDsgLyogY29zIG9mIGdlb2NlbnRyaWMgbGF0aXR1ZGUgKi9cbiAgdmFyIFJYO1xuICB2YXIgUks7XG4gIHZhciBSTjsgLyogRWFydGggcmFkaXVzIGF0IGxvY2F0aW9uICovXG4gIHZhciBDUEhJMDsgLyogY29zIG9mIHN0YXJ0IG9yIG9sZCBnZW9kZXRpYyBsYXRpdHVkZSBpbiBpdGVyYXRpb25zICovXG4gIHZhciBTUEhJMDsgLyogc2luIG9mIHN0YXJ0IG9yIG9sZCBnZW9kZXRpYyBsYXRpdHVkZSBpbiBpdGVyYXRpb25zICovXG4gIHZhciBDUEhJOyAvKiBjb3Mgb2Ygc2VhcmNoZWQgZ2VvZGV0aWMgbGF0aXR1ZGUgKi9cbiAgdmFyIFNQSEk7IC8qIHNpbiBvZiBzZWFyY2hlZCBnZW9kZXRpYyBsYXRpdHVkZSAqL1xuICB2YXIgU0RQSEk7IC8qIGVuZC1jcml0ZXJpdW06IGFkZGl0aW9uLXRoZW9yZW0gb2Ygc2luKExhdGl0dWRlKGl0ZXIpLUxhdGl0dWRlKGl0ZXItMSkpICovXG4gIHZhciBpdGVyOyAvKiAjIG9mIGNvbnRpbm91cyBpdGVyYXRpb24sIG1heC4gMzAgaXMgYWx3YXlzIGVub3VnaCAocy5hLikgKi9cblxuICB2YXIgWCA9IHAueDtcbiAgdmFyIFkgPSBwLnk7XG4gIHZhciBaID0gcC56ID8gcC56IDogMC4wOyAvL1ogdmFsdWUgbm90IGFsd2F5cyBzdXBwbGllZFxuICB2YXIgTG9uZ2l0dWRlO1xuICB2YXIgTGF0aXR1ZGU7XG4gIHZhciBIZWlnaHQ7XG5cbiAgUCA9IE1hdGguc3FydChYICogWCArIFkgKiBZKTtcbiAgUlIgPSBNYXRoLnNxcnQoWCAqIFggKyBZICogWSArIFogKiBaKTtcblxuICAvKiAgICAgIHNwZWNpYWwgY2FzZXMgZm9yIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgKi9cbiAgaWYgKFAgLyBhIDwgZ2VuYXUpIHtcblxuICAgIC8qICBzcGVjaWFsIGNhc2UsIGlmIFA9MC4gKFg9MC4sIFk9MC4pICovXG4gICAgTG9uZ2l0dWRlID0gMC4wO1xuXG4gICAgLyogIGlmIChYLFksWik9KDAuLDAuLDAuKSB0aGVuIEhlaWdodCBiZWNvbWVzIHNlbWktbWlub3IgYXhpc1xuICAgICAqICBvZiBlbGxpcHNvaWQgKD1jZW50ZXIgb2YgbWFzcyksIExhdGl0dWRlIGJlY29tZXMgUEkvMiAqL1xuICAgIGlmIChSUiAvIGEgPCBnZW5hdSkge1xuICAgICAgTGF0aXR1ZGUgPSBIQUxGX1BJO1xuICAgICAgSGVpZ2h0ID0gLWI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB4OiBwLngsXG4gICAgICAgIHk6IHAueSxcbiAgICAgICAgejogcC56XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvKiAgZWxsaXBzb2lkYWwgKGdlb2RldGljKSBsb25naXR1ZGVcbiAgICAgKiAgaW50ZXJ2YWw6IC1QSSA8IExvbmdpdHVkZSA8PSArUEkgKi9cbiAgICBMb25naXR1ZGUgPSBNYXRoLmF0YW4yKFksIFgpO1xuICB9XG5cbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogRm9sbG93aW5nIGl0ZXJhdGl2ZSBhbGdvcml0aG0gd2FzIGRldmVsb3BwZWQgYnlcbiAgICogXCJJbnN0aXR1dCBmb3IgRXJkbWVzc3VuZ1wiLCBVbml2ZXJzaXR5IG9mIEhhbm5vdmVyLCBKdWx5IDE5ODguXG4gICAqIEludGVybmV0OiB3d3cuaWZlLnVuaS1oYW5ub3Zlci5kZVxuICAgKiBJdGVyYXRpdmUgY29tcHV0YXRpb24gb2YgQ1BISSxTUEhJIGFuZCBIZWlnaHQuXG4gICAqIEl0ZXJhdGlvbiBvZiBDUEhJIGFuZCBTUEhJIHRvIDEwKiotMTIgcmFkaWFuIHJlc3AuXG4gICAqIDIqMTAqKi03IGFyY3NlYy5cbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG4gIENUID0gWiAvIFJSO1xuICBTVCA9IFAgLyBSUjtcbiAgUlggPSAxLjAgLyBNYXRoLnNxcnQoMS4wIC0gZXMgKiAoMi4wIC0gZXMpICogU1QgKiBTVCk7XG4gIENQSEkwID0gU1QgKiAoMS4wIC0gZXMpICogUlg7XG4gIFNQSEkwID0gQ1QgKiBSWDtcbiAgaXRlciA9IDA7XG5cbiAgLyogbG9vcCB0byBmaW5kIHNpbihMYXRpdHVkZSkgcmVzcC4gTGF0aXR1ZGVcbiAgICogdW50aWwgfHNpbihMYXRpdHVkZShpdGVyKS1MYXRpdHVkZShpdGVyLTEpKXwgPCBnZW5hdSAqL1xuICBkbyB7XG4gICAgaXRlcisrO1xuICAgIFJOID0gYSAvIE1hdGguc3FydCgxLjAgLSBlcyAqIFNQSEkwICogU1BISTApO1xuXG4gICAgLyogIGVsbGlwc29pZGFsIChnZW9kZXRpYykgaGVpZ2h0ICovXG4gICAgSGVpZ2h0ID0gUCAqIENQSEkwICsgWiAqIFNQSEkwIC0gUk4gKiAoMS4wIC0gZXMgKiBTUEhJMCAqIFNQSEkwKTtcblxuICAgIFJLID0gZXMgKiBSTiAvIChSTiArIEhlaWdodCk7XG4gICAgUlggPSAxLjAgLyBNYXRoLnNxcnQoMS4wIC0gUksgKiAoMi4wIC0gUkspICogU1QgKiBTVCk7XG4gICAgQ1BISSA9IFNUICogKDEuMCAtIFJLKSAqIFJYO1xuICAgIFNQSEkgPSBDVCAqIFJYO1xuICAgIFNEUEhJID0gU1BISSAqIENQSEkwIC0gQ1BISSAqIFNQSEkwO1xuICAgIENQSEkwID0gQ1BISTtcbiAgICBTUEhJMCA9IFNQSEk7XG4gIH1cbiAgd2hpbGUgKFNEUEhJICogU0RQSEkgPiBnZW5hdTIgJiYgaXRlciA8IG1heGl0ZXIpO1xuXG4gIC8qICAgICAgZWxsaXBzb2lkYWwgKGdlb2RldGljKSBsYXRpdHVkZSAqL1xuICBMYXRpdHVkZSA9IE1hdGguYXRhbihTUEhJIC8gTWF0aC5hYnMoQ1BISSkpO1xuICByZXR1cm4ge1xuICAgIHg6IExvbmdpdHVkZSxcbiAgICB5OiBMYXRpdHVkZSxcbiAgICB6OiBIZWlnaHRcbiAgfTtcbn0gLy8gY3NfZ2VvY2VudHJpY190b19nZW9kZXRpYygpXG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLy8gcGpfZ2VvY2VudGljX3RvX3dnczg0KCBwIClcbi8vICBwID0gcG9pbnQgdG8gdHJhbnNmb3JtIGluIGdlb2NlbnRyaWMgY29vcmRpbmF0ZXMgKHgseSx6KVxuXG5cbi8qKiBwb2ludCBvYmplY3QsIG5vdGhpbmcgZmFuY3ksIGp1c3QgYWxsb3dzIHZhbHVlcyB0byBiZVxuICAgIHBhc3NlZCBiYWNrIGFuZCBmb3J0aCBieSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYnkgdmFsdWUuXG4gICAgT3RoZXIgcG9pbnQgY2xhc3NlcyBtYXkgYmUgdXNlZCBhcyBsb25nIGFzIHRoZXkgaGF2ZVxuICAgIHggYW5kIHkgcHJvcGVydGllcywgd2hpY2ggd2lsbCBnZXQgbW9kaWZpZWQgaW4gdGhlIHRyYW5zZm9ybSBtZXRob2QuXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGdlb2NlbnRyaWNUb1dnczg0KHAsIGRhdHVtX3R5cGUsIGRhdHVtX3BhcmFtcykge1xuXG4gIGlmIChkYXR1bV90eXBlID09PSBQSkRfM1BBUkFNKSB7XG4gICAgLy8gaWYoIHhbaW9dID09PSBIVUdFX1ZBTCApXG4gICAgLy8gICAgY29udGludWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHAueCArIGRhdHVtX3BhcmFtc1swXSxcbiAgICAgIHk6IHAueSArIGRhdHVtX3BhcmFtc1sxXSxcbiAgICAgIHo6IHAueiArIGRhdHVtX3BhcmFtc1syXSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKGRhdHVtX3R5cGUgPT09IFBKRF83UEFSQU0pIHtcbiAgICB2YXIgRHhfQkYgPSBkYXR1bV9wYXJhbXNbMF07XG4gICAgdmFyIER5X0JGID0gZGF0dW1fcGFyYW1zWzFdO1xuICAgIHZhciBEel9CRiA9IGRhdHVtX3BhcmFtc1syXTtcbiAgICB2YXIgUnhfQkYgPSBkYXR1bV9wYXJhbXNbM107XG4gICAgdmFyIFJ5X0JGID0gZGF0dW1fcGFyYW1zWzRdO1xuICAgIHZhciBSel9CRiA9IGRhdHVtX3BhcmFtc1s1XTtcbiAgICB2YXIgTV9CRiA9IGRhdHVtX3BhcmFtc1s2XTtcbiAgICAvLyBpZiggeFtpb10gPT09IEhVR0VfVkFMIClcbiAgICAvLyAgICBjb250aW51ZTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogTV9CRiAqIChwLnggLSBSel9CRiAqIHAueSArIFJ5X0JGICogcC56KSArIER4X0JGLFxuICAgICAgeTogTV9CRiAqIChSel9CRiAqIHAueCArIHAueSAtIFJ4X0JGICogcC56KSArIER5X0JGLFxuICAgICAgejogTV9CRiAqICgtUnlfQkYgKiBwLnggKyBSeF9CRiAqIHAueSArIHAueikgKyBEel9CRlxuICAgIH07XG4gIH1cbn0gLy8gY3NfZ2VvY2VudHJpY190b193Z3M4NFxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8vIHBqX2dlb2NlbnRpY19mcm9tX3dnczg0KClcbi8vICBjb29yZGluYXRlIHN5c3RlbSBkZWZpbml0aW9uLFxuLy8gIHBvaW50IHRvIHRyYW5zZm9ybSBpbiBnZW9jZW50cmljIGNvb3JkaW5hdGVzICh4LHkseilcbmV4cG9ydCBmdW5jdGlvbiBnZW9jZW50cmljRnJvbVdnczg0KHAsIGRhdHVtX3R5cGUsIGRhdHVtX3BhcmFtcykge1xuXG4gIGlmIChkYXR1bV90eXBlID09PSBQSkRfM1BBUkFNKSB7XG4gICAgLy9pZiggeFtpb10gPT09IEhVR0VfVkFMIClcbiAgICAvLyAgICBjb250aW51ZTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcC54IC0gZGF0dW1fcGFyYW1zWzBdLFxuICAgICAgeTogcC55IC0gZGF0dW1fcGFyYW1zWzFdLFxuICAgICAgejogcC56IC0gZGF0dW1fcGFyYW1zWzJdLFxuICAgIH07XG5cbiAgfSBlbHNlIGlmIChkYXR1bV90eXBlID09PSBQSkRfN1BBUkFNKSB7XG4gICAgdmFyIER4X0JGID0gZGF0dW1fcGFyYW1zWzBdO1xuICAgIHZhciBEeV9CRiA9IGRhdHVtX3BhcmFtc1sxXTtcbiAgICB2YXIgRHpfQkYgPSBkYXR1bV9wYXJhbXNbMl07XG4gICAgdmFyIFJ4X0JGID0gZGF0dW1fcGFyYW1zWzNdO1xuICAgIHZhciBSeV9CRiA9IGRhdHVtX3BhcmFtc1s0XTtcbiAgICB2YXIgUnpfQkYgPSBkYXR1bV9wYXJhbXNbNV07XG4gICAgdmFyIE1fQkYgPSBkYXR1bV9wYXJhbXNbNl07XG4gICAgdmFyIHhfdG1wID0gKHAueCAtIER4X0JGKSAvIE1fQkY7XG4gICAgdmFyIHlfdG1wID0gKHAueSAtIER5X0JGKSAvIE1fQkY7XG4gICAgdmFyIHpfdG1wID0gKHAueiAtIER6X0JGKSAvIE1fQkY7XG4gICAgLy9pZiggeFtpb10gPT09IEhVR0VfVkFMIClcbiAgICAvLyAgICBjb250aW51ZTtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiB4X3RtcCArIFJ6X0JGICogeV90bXAgLSBSeV9CRiAqIHpfdG1wLFxuICAgICAgeTogLVJ6X0JGICogeF90bXAgKyB5X3RtcCArIFJ4X0JGICogel90bXAsXG4gICAgICB6OiBSeV9CRiAqIHhfdG1wIC0gUnhfQkYgKiB5X3RtcCArIHpfdG1wXG4gICAgfTtcbiAgfSAvL2NzX2dlb2NlbnRyaWNfZnJvbV93Z3M4NCgpXG59XG4iLCJpbXBvcnQge1BKRF8zUEFSQU0sIFBKRF83UEFSQU0sIFBKRF9OT0RBVFVNfSBmcm9tICcuL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5pbXBvcnQge2dlb2RldGljVG9HZW9jZW50cmljLCBnZW9jZW50cmljVG9HZW9kZXRpYywgZ2VvY2VudHJpY1RvV2dzODQsIGdlb2NlbnRyaWNGcm9tV2dzODQsIGNvbXBhcmVEYXR1bXN9IGZyb20gJy4vZGF0dW1VdGlscyc7XG5mdW5jdGlvbiBjaGVja1BhcmFtcyh0eXBlKSB7XG4gIHJldHVybiAodHlwZSA9PT0gUEpEXzNQQVJBTSB8fCB0eXBlID09PSBQSkRfN1BBUkFNKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc291cmNlLCBkZXN0LCBwb2ludCkge1xuICAvLyBTaG9ydCBjdXQgaWYgdGhlIGRhdHVtcyBhcmUgaWRlbnRpY2FsLlxuICBpZiAoY29tcGFyZURhdHVtcyhzb3VyY2UsIGRlc3QpKSB7XG4gICAgcmV0dXJuIHBvaW50OyAvLyBpbiB0aGlzIGNhc2UsIHplcm8gaXMgc3VjZXNzLFxuICAgIC8vIHdoZXJlYXMgY3NfY29tcGFyZV9kYXR1bXMgcmV0dXJucyAxIHRvIGluZGljYXRlIFRSVUVcbiAgICAvLyBjb25mdXNpbmcsIHNob3VsZCBmaXggdGhpc1xuICB9XG5cbiAgLy8gRXhwbGljaXRseSBza2lwIGRhdHVtIHRyYW5zZm9ybSBieSBzZXR0aW5nICdkYXR1bT1ub25lJyBhcyBwYXJhbWV0ZXIgZm9yIGVpdGhlciBzb3VyY2Ugb3IgZGVzdFxuICBpZiAoc291cmNlLmRhdHVtX3R5cGUgPT09IFBKRF9OT0RBVFVNIHx8IGRlc3QuZGF0dW1fdHlwZSA9PT0gUEpEX05PREFUVU0pIHtcbiAgICByZXR1cm4gcG9pbnQ7XG4gIH1cblxuICAvLyBJZiB0aGlzIGRhdHVtIHJlcXVpcmVzIGdyaWQgc2hpZnRzLCB0aGVuIGFwcGx5IGl0IHRvIGdlb2RldGljIGNvb3JkaW5hdGVzLlxuXG4gIC8vIERvIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCBnZW9jZW50cmljIGNvb3JkaW5hdGVzP1xuICBpZiAoc291cmNlLmVzID09PSBkZXN0LmVzICYmIHNvdXJjZS5hID09PSBkZXN0LmEgJiYgIWNoZWNrUGFyYW1zKHNvdXJjZS5kYXR1bV90eXBlKSAmJiAgIWNoZWNrUGFyYW1zKGRlc3QuZGF0dW1fdHlwZSkpIHtcbiAgICByZXR1cm4gcG9pbnQ7XG4gIH1cblxuICAvLyBDb252ZXJ0IHRvIGdlb2NlbnRyaWMgY29vcmRpbmF0ZXMuXG4gIHBvaW50ID0gZ2VvZGV0aWNUb0dlb2NlbnRyaWMocG9pbnQsIHNvdXJjZS5lcywgc291cmNlLmEpO1xuICAvLyBDb252ZXJ0IGJldHdlZW4gZGF0dW1zXG4gIGlmIChjaGVja1BhcmFtcyhzb3VyY2UuZGF0dW1fdHlwZSkpIHtcbiAgICBwb2ludCA9IGdlb2NlbnRyaWNUb1dnczg0KHBvaW50LCBzb3VyY2UuZGF0dW1fdHlwZSwgc291cmNlLmRhdHVtX3BhcmFtcyk7XG4gIH1cbiAgaWYgKGNoZWNrUGFyYW1zKGRlc3QuZGF0dW1fdHlwZSkpIHtcbiAgICBwb2ludCA9IGdlb2NlbnRyaWNGcm9tV2dzODQocG9pbnQsIGRlc3QuZGF0dW1fdHlwZSwgZGVzdC5kYXR1bV9wYXJhbXMpO1xuICB9XG4gIHJldHVybiBnZW9jZW50cmljVG9HZW9kZXRpYyhwb2ludCwgZGVzdC5lcywgZGVzdC5hLCBkZXN0LmIpO1xuXG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjcnMsIGRlbm9ybSwgcG9pbnQpIHtcbiAgdmFyIHhpbiA9IHBvaW50LngsXG4gICAgeWluID0gcG9pbnQueSxcbiAgICB6aW4gPSBwb2ludC56IHx8IDAuMDtcbiAgdmFyIHYsIHQsIGk7XG4gIHZhciBvdXQgPSB7fTtcbiAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIGlmIChkZW5vcm0gJiYgaSA9PT0gMiAmJiBwb2ludC56ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgdiA9IHhpbjtcbiAgICAgIGlmIChcImV3XCIuaW5kZXhPZihjcnMuYXhpc1tpXSkgIT09IC0xKSB7XG4gICAgICAgIHQgPSAneCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ID0gJ3knO1xuICAgICAgfVxuXG4gICAgfVxuICAgIGVsc2UgaWYgKGkgPT09IDEpIHtcbiAgICAgIHYgPSB5aW47XG4gICAgICBpZiAoXCJuc1wiLmluZGV4T2YoY3JzLmF4aXNbaV0pICE9PSAtMSkge1xuICAgICAgICB0ID0gJ3knO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdCA9ICd4JztcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2ID0gemluO1xuICAgICAgdCA9ICd6JztcbiAgICB9XG4gICAgc3dpdGNoIChjcnMuYXhpc1tpXSkge1xuICAgIGNhc2UgJ2UnOlxuICAgICAgb3V0W3RdID0gdjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3cnOlxuICAgICAgb3V0W3RdID0gLXY7XG4gICAgICBicmVhaztcbiAgICBjYXNlICduJzpcbiAgICAgIG91dFt0XSA9IHY7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzJzpcbiAgICAgIG91dFt0XSA9IC12O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndSc6XG4gICAgICBpZiAocG9pbnRbdF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvdXQueiA9IHY7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdkJzpcbiAgICAgIGlmIChwb2ludFt0XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG91dC56ID0gLXY7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgLy9jb25zb2xlLmxvZyhcIkVSUk9SOiB1bmtub3cgYXhpcyAoXCIrY3JzLmF4aXNbaV0rXCIpIC0gY2hlY2sgZGVmaW5pdGlvbiBvZiBcIitjcnMucHJvak5hbWUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYXJyYXkpe1xuICB2YXIgb3V0ID0ge1xuICAgIHg6IGFycmF5WzBdLFxuICAgIHk6IGFycmF5WzFdXG4gIH07XG4gIGlmIChhcnJheS5sZW5ndGg+Mikge1xuICAgIG91dC56ID0gYXJyYXlbMl07XG4gIH1cbiAgaWYgKGFycmF5Lmxlbmd0aD4zKSB7XG4gICAgb3V0Lm0gPSBhcnJheVszXTtcbiAgfVxuICByZXR1cm4gb3V0O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwb2ludCkge1xuICBjaGVja0Nvb3JkKHBvaW50LngpO1xuICBjaGVja0Nvb3JkKHBvaW50LnkpO1xufVxuZnVuY3Rpb24gY2hlY2tDb29yZChudW0pIHtcbiAgaWYgKHR5cGVvZiBOdW1iZXIuaXNGaW5pdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG51bSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBmaW5pdGUgbnVtYmVycycpO1xuICB9XG4gIGlmICh0eXBlb2YgbnVtICE9PSAnbnVtYmVyJyB8fCBudW0gIT09IG51bSB8fCAhaXNGaW5pdGUobnVtKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgZmluaXRlIG51bWJlcnMnKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtEMlIsIFIyRCwgUEpEXzNQQVJBTSwgUEpEXzdQQVJBTX0gZnJvbSAnLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCBkYXR1bV90cmFuc2Zvcm0gZnJvbSAnLi9kYXR1bV90cmFuc2Zvcm0nO1xuaW1wb3J0IGFkanVzdF9heGlzIGZyb20gJy4vYWRqdXN0X2F4aXMnO1xuaW1wb3J0IHByb2ogZnJvbSAnLi9Qcm9qJztcbmltcG9ydCB0b1BvaW50IGZyb20gJy4vY29tbW9uL3RvUG9pbnQnO1xuaW1wb3J0IGNoZWNrU2FuaXR5IGZyb20gJy4vY2hlY2tTYW5pdHknO1xuXG5mdW5jdGlvbiBjaGVja05vdFdHUyhzb3VyY2UsIGRlc3QpIHtcbiAgcmV0dXJuICgoc291cmNlLmRhdHVtLmRhdHVtX3R5cGUgPT09IFBKRF8zUEFSQU0gfHwgc291cmNlLmRhdHVtLmRhdHVtX3R5cGUgPT09IFBKRF83UEFSQU0pICYmIGRlc3QuZGF0dW1Db2RlICE9PSAnV0dTODQnKSB8fCAoKGRlc3QuZGF0dW0uZGF0dW1fdHlwZSA9PT0gUEpEXzNQQVJBTSB8fCBkZXN0LmRhdHVtLmRhdHVtX3R5cGUgPT09IFBKRF83UEFSQU0pICYmIHNvdXJjZS5kYXR1bUNvZGUgIT09ICdXR1M4NCcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm0oc291cmNlLCBkZXN0LCBwb2ludCkge1xuICB2YXIgd2dzODQ7XG4gIGlmIChBcnJheS5pc0FycmF5KHBvaW50KSkge1xuICAgIHBvaW50ID0gdG9Qb2ludChwb2ludCk7XG4gIH1cbiAgY2hlY2tTYW5pdHkocG9pbnQpO1xuICAvLyBXb3JrYXJvdW5kIGZvciBkYXR1bSBzaGlmdHMgdG93Z3M4NCwgaWYgZWl0aGVyIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBwcm9qZWN0aW9uIGlzIG5vdCB3Z3M4NFxuICBpZiAoc291cmNlLmRhdHVtICYmIGRlc3QuZGF0dW0gJiYgY2hlY2tOb3RXR1Moc291cmNlLCBkZXN0KSkge1xuICAgIHdnczg0ID0gbmV3IHByb2ooJ1dHUzg0Jyk7XG4gICAgcG9pbnQgPSB0cmFuc2Zvcm0oc291cmNlLCB3Z3M4NCwgcG9pbnQpO1xuICAgIHNvdXJjZSA9IHdnczg0O1xuICB9XG4gIC8vIERHUiwgMjAxMC8xMS8xMlxuICBpZiAoc291cmNlLmF4aXMgIT09ICdlbnUnKSB7XG4gICAgcG9pbnQgPSBhZGp1c3RfYXhpcyhzb3VyY2UsIGZhbHNlLCBwb2ludCk7XG4gIH1cbiAgLy8gVHJhbnNmb3JtIHNvdXJjZSBwb2ludHMgdG8gbG9uZy9sYXQsIGlmIHRoZXkgYXJlbid0IGFscmVhZHkuXG4gIGlmIChzb3VyY2UucHJvak5hbWUgPT09ICdsb25nbGF0Jykge1xuICAgIHBvaW50ID0ge1xuICAgICAgeDogcG9pbnQueCAqIEQyUixcbiAgICAgIHk6IHBvaW50LnkgKiBEMlIsXG4gICAgICB6OiBwb2ludC56IHx8IDBcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmIChzb3VyY2UudG9fbWV0ZXIpIHtcbiAgICAgIHBvaW50ID0ge1xuICAgICAgICB4OiBwb2ludC54ICogc291cmNlLnRvX21ldGVyLFxuICAgICAgICB5OiBwb2ludC55ICogc291cmNlLnRvX21ldGVyLFxuICAgICAgICB6OiBwb2ludC56IHx8IDBcbiAgICAgIH07XG4gICAgfVxuICAgIHBvaW50ID0gc291cmNlLmludmVyc2UocG9pbnQpOyAvLyBDb252ZXJ0IENhcnRlc2lhbiB0byBsb25nbGF0XG4gICAgaWYgKCFwb2ludCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAvLyBBZGp1c3QgZm9yIHRoZSBwcmltZSBtZXJpZGlhbiBpZiBuZWNlc3NhcnlcbiAgaWYgKHNvdXJjZS5mcm9tX2dyZWVud2ljaCkge1xuICAgIHBvaW50LnggKz0gc291cmNlLmZyb21fZ3JlZW53aWNoO1xuICB9XG5cbiAgLy8gQ29udmVydCBkYXR1bXMgaWYgbmVlZGVkLCBhbmQgaWYgcG9zc2libGUuXG4gIHBvaW50ID0gZGF0dW1fdHJhbnNmb3JtKHNvdXJjZS5kYXR1bSwgZGVzdC5kYXR1bSwgcG9pbnQpO1xuXG4gIC8vIEFkanVzdCBmb3IgdGhlIHByaW1lIG1lcmlkaWFuIGlmIG5lY2Vzc2FyeVxuICBpZiAoZGVzdC5mcm9tX2dyZWVud2ljaCkge1xuICAgIHBvaW50ID0ge1xuICAgICAgeDogcG9pbnQueCAtIGRlc3QuZnJvbV9ncmVlbndpY2gsXG4gICAgICB5OiBwb2ludC55LFxuICAgICAgejogcG9pbnQueiB8fCAwXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkZXN0LnByb2pOYW1lID09PSAnbG9uZ2xhdCcpIHtcbiAgICAvLyBjb252ZXJ0IHJhZGlhbnMgdG8gZGVjaW1hbCBkZWdyZWVzXG4gICAgcG9pbnQgPSB7XG4gICAgICB4OiBwb2ludC54ICogUjJELFxuICAgICAgeTogcG9pbnQueSAqIFIyRCxcbiAgICAgIHo6IHBvaW50LnogfHwgMFxuICAgIH07XG4gIH0gZWxzZSB7IC8vIGVsc2UgcHJvamVjdFxuICAgIHBvaW50ID0gZGVzdC5mb3J3YXJkKHBvaW50KTtcbiAgICBpZiAoZGVzdC50b19tZXRlcikge1xuICAgICAgcG9pbnQgPSB7XG4gICAgICAgIHg6IHBvaW50LnggLyBkZXN0LnRvX21ldGVyLFxuICAgICAgICB5OiBwb2ludC55IC8gZGVzdC50b19tZXRlcixcbiAgICAgICAgejogcG9pbnQueiB8fCAwXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIERHUiwgMjAxMC8xMS8xMlxuICBpZiAoZGVzdC5heGlzICE9PSAnZW51Jykge1xuICAgIHJldHVybiBhZGp1c3RfYXhpcyhkZXN0LCB0cnVlLCBwb2ludCk7XG4gIH1cblxuICByZXR1cm4gcG9pbnQ7XG59XG4iLCJpbXBvcnQgcHJvaiBmcm9tICcuL1Byb2onO1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tICcuL3RyYW5zZm9ybSc7XG52YXIgd2dzODQgPSBwcm9qKCdXR1M4NCcpO1xuXG5mdW5jdGlvbiB0cmFuc2Zvcm1lcihmcm9tLCB0bywgY29vcmRzKSB7XG4gIHZhciB0cmFuc2Zvcm1lZEFycmF5LCBvdXQsIGtleXM7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvb3JkcykpIHtcbiAgICB0cmFuc2Zvcm1lZEFycmF5ID0gdHJhbnNmb3JtKGZyb20sIHRvLCBjb29yZHMpIHx8IHt4OiBOYU4sIHk6IE5hTn07XG4gICAgaWYgKGNvb3Jkcy5sZW5ndGggPiAyKSB7XG4gICAgICBpZiAoKHR5cGVvZiBmcm9tLm5hbWUgIT09ICd1bmRlZmluZWQnICYmIGZyb20ubmFtZSA9PT0gJ2dlb2NlbnQnKSB8fCAodHlwZW9mIHRvLm5hbWUgIT09ICd1bmRlZmluZWQnICYmIHRvLm5hbWUgPT09ICdnZW9jZW50JykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZEFycmF5LnogPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmV0dXJuIFt0cmFuc2Zvcm1lZEFycmF5LngsIHRyYW5zZm9ybWVkQXJyYXkueSwgdHJhbnNmb3JtZWRBcnJheS56XS5jb25jYXQoY29vcmRzLnNwbGljZSgzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFt0cmFuc2Zvcm1lZEFycmF5LngsIHRyYW5zZm9ybWVkQXJyYXkueSwgY29vcmRzWzJdXS5jb25jYXQoY29vcmRzLnNwbGljZSgzKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbdHJhbnNmb3JtZWRBcnJheS54LCB0cmFuc2Zvcm1lZEFycmF5LnldLmNvbmNhdChjb29yZHMuc3BsaWNlKDIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFt0cmFuc2Zvcm1lZEFycmF5LngsIHRyYW5zZm9ybWVkQXJyYXkueV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCA9IHRyYW5zZm9ybShmcm9tLCB0bywgY29vcmRzKTtcbiAgICBrZXlzID0gT2JqZWN0LmtleXMoY29vcmRzKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoKHR5cGVvZiBmcm9tLm5hbWUgIT09ICd1bmRlZmluZWQnICYmIGZyb20ubmFtZSA9PT0gJ2dlb2NlbnQnKSB8fCAodHlwZW9mIHRvLm5hbWUgIT09ICd1bmRlZmluZWQnICYmIHRvLm5hbWUgPT09ICdnZW9jZW50JykpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3gnIHx8IGtleSA9PT0gJ3knIHx8IGtleSA9PT0gJ3onKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoa2V5ID09PSAneCcgfHwga2V5ID09PSAneScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dFtrZXldID0gY29vcmRzW2tleV07XG4gICAgfSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb2ooaXRlbSkge1xuICBpZiAoaXRlbSBpbnN0YW5jZW9mIHByb2opIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuICBpZiAoaXRlbS5vUHJvaikge1xuICAgIHJldHVybiBpdGVtLm9Qcm9qO1xuICB9XG4gIHJldHVybiBwcm9qKGl0ZW0pO1xufVxuXG5mdW5jdGlvbiBwcm9qNChmcm9tUHJvaiwgdG9Qcm9qLCBjb29yZCkge1xuICBmcm9tUHJvaiA9IGNoZWNrUHJvaihmcm9tUHJvaik7XG4gIHZhciBzaW5nbGUgPSBmYWxzZTtcbiAgdmFyIG9iajtcbiAgaWYgKHR5cGVvZiB0b1Byb2ogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdG9Qcm9qID0gZnJvbVByb2o7XG4gICAgZnJvbVByb2ogPSB3Z3M4NDtcbiAgICBzaW5nbGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB0b1Byb2oueCAhPT0gJ3VuZGVmaW5lZCcgfHwgQXJyYXkuaXNBcnJheSh0b1Byb2opKSB7XG4gICAgY29vcmQgPSB0b1Byb2o7XG4gICAgdG9Qcm9qID0gZnJvbVByb2o7XG4gICAgZnJvbVByb2ogPSB3Z3M4NDtcbiAgICBzaW5nbGUgPSB0cnVlO1xuICB9XG4gIHRvUHJvaiA9IGNoZWNrUHJvaih0b1Byb2opO1xuICBpZiAoY29vcmQpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtZXIoZnJvbVByb2osIHRvUHJvaiwgY29vcmQpO1xuICB9IGVsc2Uge1xuICAgIG9iaiA9IHtcbiAgICAgIGZvcndhcmQ6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVyKGZyb21Qcm9qLCB0b1Byb2osIGNvb3Jkcyk7XG4gICAgICB9LFxuICAgICAgaW52ZXJzZTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtZXIodG9Qcm9qLCBmcm9tUHJvaiwgY29vcmRzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChzaW5nbGUpIHtcbiAgICAgIG9iai5vUHJvaiA9IHRvUHJvajtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgcHJvajQ7IiwiXG5cblxuLyoqXG4gKiBVVE0gem9uZXMgYXJlIGdyb3VwZWQsIGFuZCBhc3NpZ25lZCB0byBvbmUgb2YgYSBncm91cCBvZiA2XG4gKiBzZXRzLlxuICpcbiAqIHtpbnR9IEBwcml2YXRlXG4gKi9cbnZhciBOVU1fMTAwS19TRVRTID0gNjtcblxuLyoqXG4gKiBUaGUgY29sdW1uIGxldHRlcnMgKGZvciBlYXN0aW5nKSBvZiB0aGUgbG93ZXIgbGVmdCB2YWx1ZSwgcGVyXG4gKiBzZXQuXG4gKlxuICoge3N0cmluZ30gQHByaXZhdGVcbiAqL1xudmFyIFNFVF9PUklHSU5fQ09MVU1OX0xFVFRFUlMgPSAnQUpTQUpTJztcblxuLyoqXG4gKiBUaGUgcm93IGxldHRlcnMgKGZvciBub3J0aGluZykgb2YgdGhlIGxvd2VyIGxlZnQgdmFsdWUsIHBlclxuICogc2V0LlxuICpcbiAqIHtzdHJpbmd9IEBwcml2YXRlXG4gKi9cbnZhciBTRVRfT1JJR0lOX1JPV19MRVRURVJTID0gJ0FGQUZBRic7XG5cbnZhciBBID0gNjU7IC8vIEFcbnZhciBJID0gNzM7IC8vIElcbnZhciBPID0gNzk7IC8vIE9cbnZhciBWID0gODY7IC8vIFZcbnZhciBaID0gOTA7IC8vIFpcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgdG9Qb2ludDogdG9Qb2ludFxufTtcbi8qKlxuICogQ29udmVyc2lvbiBvZiBsYXQvbG9uIHRvIE1HUlMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGxsIE9iamVjdCBsaXRlcmFsIHdpdGggbGF0IGFuZCBsb24gcHJvcGVydGllcyBvbiBhXG4gKiAgICAgV0dTODQgZWxsaXBzb2lkLlxuICogQHBhcmFtIHtpbnR9IGFjY3VyYWN5IEFjY3VyYWN5IGluIGRpZ2l0cyAoNSBmb3IgMSBtLCA0IGZvciAxMCBtLCAzIGZvclxuICogICAgICAxMDAgbSwgMiBmb3IgMTAwMCBtIG9yIDEgZm9yIDEwMDAwIG0pLiBPcHRpb25hbCwgZGVmYXVsdCBpcyA1LlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgTUdSUyBzdHJpbmcgZm9yIHRoZSBnaXZlbiBsb2NhdGlvbiBhbmQgYWNjdXJhY3kuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKGxsLCBhY2N1cmFjeSkge1xuICBhY2N1cmFjeSA9IGFjY3VyYWN5IHx8IDU7IC8vIGRlZmF1bHQgYWNjdXJhY3kgMW1cbiAgcmV0dXJuIGVuY29kZShMTHRvVVRNKHtcbiAgICBsYXQ6IGxsWzFdLFxuICAgIGxvbjogbGxbMF1cbiAgfSksIGFjY3VyYWN5KTtcbn07XG5cbi8qKlxuICogQ29udmVyc2lvbiBvZiBNR1JTIHRvIGxhdC9sb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1ncnMgTUdSUyBzdHJpbmcuXG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgd2l0aCBsZWZ0IChsb25naXR1ZGUpLCBib3R0b20gKGxhdGl0dWRlKSwgcmlnaHRcbiAqICAgICAobG9uZ2l0dWRlKSBhbmQgdG9wIChsYXRpdHVkZSkgdmFsdWVzIGluIFdHUzg0LCByZXByZXNlbnRpbmcgdGhlXG4gKiAgICAgYm91bmRpbmcgYm94IGZvciB0aGUgcHJvdmlkZWQgTUdSUyByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKG1ncnMpIHtcbiAgdmFyIGJib3ggPSBVVE10b0xMKGRlY29kZShtZ3JzLnRvVXBwZXJDYXNlKCkpKTtcbiAgaWYgKGJib3gubGF0ICYmIGJib3gubG9uKSB7XG4gICAgcmV0dXJuIFtiYm94LmxvbiwgYmJveC5sYXQsIGJib3gubG9uLCBiYm94LmxhdF07XG4gIH1cbiAgcmV0dXJuIFtiYm94LmxlZnQsIGJib3guYm90dG9tLCBiYm94LnJpZ2h0LCBiYm94LnRvcF07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9Qb2ludChtZ3JzKSB7XG4gIHZhciBiYm94ID0gVVRNdG9MTChkZWNvZGUobWdycy50b1VwcGVyQ2FzZSgpKSk7XG4gIGlmIChiYm94LmxhdCAmJiBiYm94Lmxvbikge1xuICAgIHJldHVybiBbYmJveC5sb24sIGJib3gubGF0XTtcbiAgfVxuICByZXR1cm4gWyhiYm94LmxlZnQgKyBiYm94LnJpZ2h0KSAvIDIsIChiYm94LnRvcCArIGJib3guYm90dG9tKSAvIDJdO1xufTtcbi8qKlxuICogQ29udmVyc2lvbiBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRlZyB0aGUgYW5nbGUgaW4gZGVncmVlcy5cbiAqIEByZXR1cm4ge251bWJlcn0gdGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKi9cbmZ1bmN0aW9uIGRlZ1RvUmFkKGRlZykge1xuICByZXR1cm4gKGRlZyAqIChNYXRoLlBJIC8gMTgwLjApKTtcbn1cblxuLyoqXG4gKiBDb252ZXJzaW9uIGZyb20gcmFkaWFucyB0byBkZWdyZWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zLlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgYW5nbGUgaW4gZGVncmVlcy5cbiAqL1xuZnVuY3Rpb24gcmFkVG9EZWcocmFkKSB7XG4gIHJldHVybiAoMTgwLjAgKiAocmFkIC8gTWF0aC5QSSkpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc2V0IG9mIExvbmdpdHVkZSBhbmQgTGF0aXR1ZGUgY28tb3JkaW5hdGVzIHRvIFVUTVxuICogdXNpbmcgdGhlIFdHUzg0IGVsbGlwc29pZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IGxsIE9iamVjdCBsaXRlcmFsIHdpdGggbGF0IGFuZCBsb24gcHJvcGVydGllc1xuICogICAgIHJlcHJlc2VudGluZyB0aGUgV0dTODQgY29vcmRpbmF0ZSB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBsaXRlcmFsIGNvbnRhaW5pbmcgdGhlIFVUTSB2YWx1ZSB3aXRoIGVhc3RpbmcsXG4gKiAgICAgbm9ydGhpbmcsIHpvbmVOdW1iZXIgYW5kIHpvbmVMZXR0ZXIgcHJvcGVydGllcywgYW5kIGFuIG9wdGlvbmFsXG4gKiAgICAgYWNjdXJhY3kgcHJvcGVydHkgaW4gZGlnaXRzLiBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkLlxuICovXG5mdW5jdGlvbiBMTHRvVVRNKGxsKSB7XG4gIHZhciBMYXQgPSBsbC5sYXQ7XG4gIHZhciBMb25nID0gbGwubG9uO1xuICB2YXIgYSA9IDYzNzgxMzcuMDsgLy9lbGxpcC5yYWRpdXM7XG4gIHZhciBlY2NTcXVhcmVkID0gMC4wMDY2OTQzODsgLy9lbGxpcC5lY2NzcTtcbiAgdmFyIGswID0gMC45OTk2O1xuICB2YXIgTG9uZ09yaWdpbjtcbiAgdmFyIGVjY1ByaW1lU3F1YXJlZDtcbiAgdmFyIE4sIFQsIEMsIEEsIE07XG4gIHZhciBMYXRSYWQgPSBkZWdUb1JhZChMYXQpO1xuICB2YXIgTG9uZ1JhZCA9IGRlZ1RvUmFkKExvbmcpO1xuICB2YXIgTG9uZ09yaWdpblJhZDtcbiAgdmFyIFpvbmVOdW1iZXI7XG4gIC8vIChpbnQpXG4gIFpvbmVOdW1iZXIgPSBNYXRoLmZsb29yKChMb25nICsgMTgwKSAvIDYpICsgMTtcblxuICAvL01ha2Ugc3VyZSB0aGUgbG9uZ2l0dWRlIDE4MC4wMCBpcyBpbiBab25lIDYwXG4gIGlmIChMb25nID09PSAxODApIHtcbiAgICBab25lTnVtYmVyID0gNjA7XG4gIH1cblxuICAvLyBTcGVjaWFsIHpvbmUgZm9yIE5vcndheVxuICBpZiAoTGF0ID49IDU2LjAgJiYgTGF0IDwgNjQuMCAmJiBMb25nID49IDMuMCAmJiBMb25nIDwgMTIuMCkge1xuICAgIFpvbmVOdW1iZXIgPSAzMjtcbiAgfVxuXG4gIC8vIFNwZWNpYWwgem9uZXMgZm9yIFN2YWxiYXJkXG4gIGlmIChMYXQgPj0gNzIuMCAmJiBMYXQgPCA4NC4wKSB7XG4gICAgaWYgKExvbmcgPj0gMC4wICYmIExvbmcgPCA5LjApIHtcbiAgICAgIFpvbmVOdW1iZXIgPSAzMTtcbiAgICB9XG4gICAgZWxzZSBpZiAoTG9uZyA+PSA5LjAgJiYgTG9uZyA8IDIxLjApIHtcbiAgICAgIFpvbmVOdW1iZXIgPSAzMztcbiAgICB9XG4gICAgZWxzZSBpZiAoTG9uZyA+PSAyMS4wICYmIExvbmcgPCAzMy4wKSB7XG4gICAgICBab25lTnVtYmVyID0gMzU7XG4gICAgfVxuICAgIGVsc2UgaWYgKExvbmcgPj0gMzMuMCAmJiBMb25nIDwgNDIuMCkge1xuICAgICAgWm9uZU51bWJlciA9IDM3O1xuICAgIH1cbiAgfVxuXG4gIExvbmdPcmlnaW4gPSAoWm9uZU51bWJlciAtIDEpICogNiAtIDE4MCArIDM7IC8vKzMgcHV0cyBvcmlnaW5cbiAgLy8gaW4gbWlkZGxlIG9mXG4gIC8vIHpvbmVcbiAgTG9uZ09yaWdpblJhZCA9IGRlZ1RvUmFkKExvbmdPcmlnaW4pO1xuXG4gIGVjY1ByaW1lU3F1YXJlZCA9IChlY2NTcXVhcmVkKSAvICgxIC0gZWNjU3F1YXJlZCk7XG5cbiAgTiA9IGEgLyBNYXRoLnNxcnQoMSAtIGVjY1NxdWFyZWQgKiBNYXRoLnNpbihMYXRSYWQpICogTWF0aC5zaW4oTGF0UmFkKSk7XG4gIFQgPSBNYXRoLnRhbihMYXRSYWQpICogTWF0aC50YW4oTGF0UmFkKTtcbiAgQyA9IGVjY1ByaW1lU3F1YXJlZCAqIE1hdGguY29zKExhdFJhZCkgKiBNYXRoLmNvcyhMYXRSYWQpO1xuICBBID0gTWF0aC5jb3MoTGF0UmFkKSAqIChMb25nUmFkIC0gTG9uZ09yaWdpblJhZCk7XG5cbiAgTSA9IGEgKiAoKDEgLSBlY2NTcXVhcmVkIC8gNCAtIDMgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAvIDY0IC0gNSAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAvIDI1NikgKiBMYXRSYWQgLSAoMyAqIGVjY1NxdWFyZWQgLyA4ICsgMyAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMzIgKyA0NSAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAvIDEwMjQpICogTWF0aC5zaW4oMiAqIExhdFJhZCkgKyAoMTUgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAvIDI1NiArIDQ1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMTAyNCkgKiBNYXRoLnNpbig0ICogTGF0UmFkKSAtICgzNSAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAvIDMwNzIpICogTWF0aC5zaW4oNiAqIExhdFJhZCkpO1xuXG4gIHZhciBVVE1FYXN0aW5nID0gKGswICogTiAqIChBICsgKDEgLSBUICsgQykgKiBBICogQSAqIEEgLyA2LjAgKyAoNSAtIDE4ICogVCArIFQgKiBUICsgNzIgKiBDIC0gNTggKiBlY2NQcmltZVNxdWFyZWQpICogQSAqIEEgKiBBICogQSAqIEEgLyAxMjAuMCkgKyA1MDAwMDAuMCk7XG5cbiAgdmFyIFVUTU5vcnRoaW5nID0gKGswICogKE0gKyBOICogTWF0aC50YW4oTGF0UmFkKSAqIChBICogQSAvIDIgKyAoNSAtIFQgKyA5ICogQyArIDQgKiBDICogQykgKiBBICogQSAqIEEgKiBBIC8gMjQuMCArICg2MSAtIDU4ICogVCArIFQgKiBUICsgNjAwICogQyAtIDMzMCAqIGVjY1ByaW1lU3F1YXJlZCkgKiBBICogQSAqIEEgKiBBICogQSAqIEEgLyA3MjAuMCkpKTtcbiAgaWYgKExhdCA8IDAuMCkge1xuICAgIFVUTU5vcnRoaW5nICs9IDEwMDAwMDAwLjA7IC8vMTAwMDAwMDAgbWV0ZXIgb2Zmc2V0IGZvclxuICAgIC8vIHNvdXRoZXJuIGhlbWlzcGhlcmVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbm9ydGhpbmc6IE1hdGgucm91bmQoVVRNTm9ydGhpbmcpLFxuICAgIGVhc3Rpbmc6IE1hdGgucm91bmQoVVRNRWFzdGluZyksXG4gICAgem9uZU51bWJlcjogWm9uZU51bWJlcixcbiAgICB6b25lTGV0dGVyOiBnZXRMZXR0ZXJEZXNpZ25hdG9yKExhdClcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBVVE0gY29vcmRzIHRvIGxhdC9sb25nLCB1c2luZyB0aGUgV0dTODQgZWxsaXBzb2lkLiBUaGlzIGlzIGEgY29udmVuaWVuY2VcbiAqIGNsYXNzIHdoZXJlIHRoZSBab25lIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBzaW5nbGUgc3RyaW5nIGVnLlwiNjBOXCIgd2hpY2hcbiAqIGlzIHRoZW4gYnJva2VuIGRvd24gaW50byB0aGUgWm9uZU51bWJlciBhbmQgWm9uZUxldHRlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IHV0bSBBbiBvYmplY3QgbGl0ZXJhbCB3aXRoIG5vcnRoaW5nLCBlYXN0aW5nLCB6b25lTnVtYmVyXG4gKiAgICAgYW5kIHpvbmVMZXR0ZXIgcHJvcGVydGllcy4gSWYgYW4gb3B0aW9uYWwgYWNjdXJhY3kgcHJvcGVydHkgaXNcbiAqICAgICBwcm92aWRlZCAoaW4gbWV0ZXJzKSwgYSBib3VuZGluZyBib3ggd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkIG9mXG4gKiAgICAgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZS5cbiAqIEByZXR1cm4ge29iamVjdH0gQW4gb2JqZWN0IGxpdGVyYWwgY29udGFpbmluZyBlaXRoZXIgbGF0IGFuZCBsb24gdmFsdWVzXG4gKiAgICAgKGlmIG5vIGFjY3VyYWN5IHdhcyBwcm92aWRlZCksIG9yIHRvcCwgcmlnaHQsIGJvdHRvbSBhbmQgbGVmdCB2YWx1ZXNcbiAqICAgICBmb3IgdGhlIGJvdW5kaW5nIGJveCBjYWxjdWxhdGVkIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgYWNjdXJhY3kuXG4gKiAgICAgUmV0dXJucyBudWxsIGlmIHRoZSBjb252ZXJzaW9uIGZhaWxlZC5cbiAqL1xuZnVuY3Rpb24gVVRNdG9MTCh1dG0pIHtcblxuICB2YXIgVVRNTm9ydGhpbmcgPSB1dG0ubm9ydGhpbmc7XG4gIHZhciBVVE1FYXN0aW5nID0gdXRtLmVhc3Rpbmc7XG4gIHZhciB6b25lTGV0dGVyID0gdXRtLnpvbmVMZXR0ZXI7XG4gIHZhciB6b25lTnVtYmVyID0gdXRtLnpvbmVOdW1iZXI7XG4gIC8vIGNoZWNrIHRoZSBab25lTnVtbWJlciBpcyB2YWxpZFxuICBpZiAoem9uZU51bWJlciA8IDAgfHwgem9uZU51bWJlciA+IDYwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgazAgPSAwLjk5OTY7XG4gIHZhciBhID0gNjM3ODEzNy4wOyAvL2VsbGlwLnJhZGl1cztcbiAgdmFyIGVjY1NxdWFyZWQgPSAwLjAwNjY5NDM4OyAvL2VsbGlwLmVjY3NxO1xuICB2YXIgZWNjUHJpbWVTcXVhcmVkO1xuICB2YXIgZTEgPSAoMSAtIE1hdGguc3FydCgxIC0gZWNjU3F1YXJlZCkpIC8gKDEgKyBNYXRoLnNxcnQoMSAtIGVjY1NxdWFyZWQpKTtcbiAgdmFyIE4xLCBUMSwgQzEsIFIxLCBELCBNO1xuICB2YXIgTG9uZ09yaWdpbjtcbiAgdmFyIG11LCBwaGkxUmFkO1xuXG4gIC8vIHJlbW92ZSA1MDAsMDAwIG1ldGVyIG9mZnNldCBmb3IgbG9uZ2l0dWRlXG4gIHZhciB4ID0gVVRNRWFzdGluZyAtIDUwMDAwMC4wO1xuICB2YXIgeSA9IFVUTU5vcnRoaW5nO1xuXG4gIC8vIFdlIG11c3Qga25vdyBzb21laG93IGlmIHdlIGFyZSBpbiB0aGUgTm9ydGhlcm4gb3IgU291dGhlcm5cbiAgLy8gaGVtaXNwaGVyZSwgdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIHVzZSB0aGUgbGV0dGVyIFNvIGV2ZW5cbiAgLy8gaWYgdGhlIFpvbmUgbGV0dGVyIGlzbid0IGV4YWN0bHkgY29ycmVjdCBpdCBzaG91bGQgaW5kaWNhdGVcbiAgLy8gdGhlIGhlbWlzcGhlcmUgY29ycmVjdGx5XG4gIGlmICh6b25lTGV0dGVyIDwgJ04nKSB7XG4gICAgeSAtPSAxMDAwMDAwMC4wOyAvLyByZW1vdmUgMTAsMDAwLDAwMCBtZXRlciBvZmZzZXQgdXNlZFxuICAgIC8vIGZvciBzb3V0aGVybiBoZW1pc3BoZXJlXG4gIH1cblxuICAvLyBUaGVyZSBhcmUgNjAgem9uZXMgd2l0aCB6b25lIDEgYmVpbmcgYXQgV2VzdCAtMTgwIHRvIC0xNzRcbiAgTG9uZ09yaWdpbiA9ICh6b25lTnVtYmVyIC0gMSkgKiA2IC0gMTgwICsgMzsgLy8gKzMgcHV0cyBvcmlnaW5cbiAgLy8gaW4gbWlkZGxlIG9mXG4gIC8vIHpvbmVcblxuICBlY2NQcmltZVNxdWFyZWQgPSAoZWNjU3F1YXJlZCkgLyAoMSAtIGVjY1NxdWFyZWQpO1xuXG4gIE0gPSB5IC8gazA7XG4gIG11ID0gTSAvIChhICogKDEgLSBlY2NTcXVhcmVkIC8gNCAtIDMgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAvIDY0IC0gNSAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAvIDI1NikpO1xuXG4gIHBoaTFSYWQgPSBtdSArICgzICogZTEgLyAyIC0gMjcgKiBlMSAqIGUxICogZTEgLyAzMikgKiBNYXRoLnNpbigyICogbXUpICsgKDIxICogZTEgKiBlMSAvIDE2IC0gNTUgKiBlMSAqIGUxICogZTEgKiBlMSAvIDMyKSAqIE1hdGguc2luKDQgKiBtdSkgKyAoMTUxICogZTEgKiBlMSAqIGUxIC8gOTYpICogTWF0aC5zaW4oNiAqIG11KTtcbiAgLy8gZG91YmxlIHBoaTEgPSBQcm9qTWF0aC5yYWRUb0RlZyhwaGkxUmFkKTtcblxuICBOMSA9IGEgLyBNYXRoLnNxcnQoMSAtIGVjY1NxdWFyZWQgKiBNYXRoLnNpbihwaGkxUmFkKSAqIE1hdGguc2luKHBoaTFSYWQpKTtcbiAgVDEgPSBNYXRoLnRhbihwaGkxUmFkKSAqIE1hdGgudGFuKHBoaTFSYWQpO1xuICBDMSA9IGVjY1ByaW1lU3F1YXJlZCAqIE1hdGguY29zKHBoaTFSYWQpICogTWF0aC5jb3MocGhpMVJhZCk7XG4gIFIxID0gYSAqICgxIC0gZWNjU3F1YXJlZCkgLyBNYXRoLnBvdygxIC0gZWNjU3F1YXJlZCAqIE1hdGguc2luKHBoaTFSYWQpICogTWF0aC5zaW4ocGhpMVJhZCksIDEuNSk7XG4gIEQgPSB4IC8gKE4xICogazApO1xuXG4gIHZhciBsYXQgPSBwaGkxUmFkIC0gKE4xICogTWF0aC50YW4ocGhpMVJhZCkgLyBSMSkgKiAoRCAqIEQgLyAyIC0gKDUgKyAzICogVDEgKyAxMCAqIEMxIC0gNCAqIEMxICogQzEgLSA5ICogZWNjUHJpbWVTcXVhcmVkKSAqIEQgKiBEICogRCAqIEQgLyAyNCArICg2MSArIDkwICogVDEgKyAyOTggKiBDMSArIDQ1ICogVDEgKiBUMSAtIDI1MiAqIGVjY1ByaW1lU3F1YXJlZCAtIDMgKiBDMSAqIEMxKSAqIEQgKiBEICogRCAqIEQgKiBEICogRCAvIDcyMCk7XG4gIGxhdCA9IHJhZFRvRGVnKGxhdCk7XG5cbiAgdmFyIGxvbiA9IChEIC0gKDEgKyAyICogVDEgKyBDMSkgKiBEICogRCAqIEQgLyA2ICsgKDUgLSAyICogQzEgKyAyOCAqIFQxIC0gMyAqIEMxICogQzEgKyA4ICogZWNjUHJpbWVTcXVhcmVkICsgMjQgKiBUMSAqIFQxKSAqIEQgKiBEICogRCAqIEQgKiBEIC8gMTIwKSAvIE1hdGguY29zKHBoaTFSYWQpO1xuICBsb24gPSBMb25nT3JpZ2luICsgcmFkVG9EZWcobG9uKTtcblxuICB2YXIgcmVzdWx0O1xuICBpZiAodXRtLmFjY3VyYWN5KSB7XG4gICAgdmFyIHRvcFJpZ2h0ID0gVVRNdG9MTCh7XG4gICAgICBub3J0aGluZzogdXRtLm5vcnRoaW5nICsgdXRtLmFjY3VyYWN5LFxuICAgICAgZWFzdGluZzogdXRtLmVhc3RpbmcgKyB1dG0uYWNjdXJhY3ksXG4gICAgICB6b25lTGV0dGVyOiB1dG0uem9uZUxldHRlcixcbiAgICAgIHpvbmVOdW1iZXI6IHV0bS56b25lTnVtYmVyXG4gICAgfSk7XG4gICAgcmVzdWx0ID0ge1xuICAgICAgdG9wOiB0b3BSaWdodC5sYXQsXG4gICAgICByaWdodDogdG9wUmlnaHQubG9uLFxuICAgICAgYm90dG9tOiBsYXQsXG4gICAgICBsZWZ0OiBsb25cbiAgICB9O1xuICB9XG4gIGVsc2Uge1xuICAgIHJlc3VsdCA9IHtcbiAgICAgIGxhdDogbGF0LFxuICAgICAgbG9uOiBsb25cbiAgICB9O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgTUdSUyBsZXR0ZXIgZGVzaWduYXRvciBmb3IgdGhlIGdpdmVuIGxhdGl0dWRlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbGF0IFRoZSBsYXRpdHVkZSBpbiBXR1M4NCB0byBnZXQgdGhlIGxldHRlciBkZXNpZ25hdG9yXG4gKiAgICAgZm9yLlxuICogQHJldHVybiB7Y2hhcn0gVGhlIGxldHRlciBkZXNpZ25hdG9yLlxuICovXG5mdW5jdGlvbiBnZXRMZXR0ZXJEZXNpZ25hdG9yKGxhdCkge1xuICAvL1RoaXMgaXMgaGVyZSBhcyBhbiBlcnJvciBmbGFnIHRvIHNob3cgdGhhdCB0aGUgTGF0aXR1ZGUgaXNcbiAgLy9vdXRzaWRlIE1HUlMgbGltaXRzXG4gIHZhciBMZXR0ZXJEZXNpZ25hdG9yID0gJ1onO1xuXG4gIGlmICgoODQgPj0gbGF0KSAmJiAobGF0ID49IDcyKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnWCc7XG4gIH1cbiAgZWxzZSBpZiAoKDcyID4gbGF0KSAmJiAobGF0ID49IDY0KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnVyc7XG4gIH1cbiAgZWxzZSBpZiAoKDY0ID4gbGF0KSAmJiAobGF0ID49IDU2KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnVic7XG4gIH1cbiAgZWxzZSBpZiAoKDU2ID4gbGF0KSAmJiAobGF0ID49IDQ4KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnVSc7XG4gIH1cbiAgZWxzZSBpZiAoKDQ4ID4gbGF0KSAmJiAobGF0ID49IDQwKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnVCc7XG4gIH1cbiAgZWxzZSBpZiAoKDQwID4gbGF0KSAmJiAobGF0ID49IDMyKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnUyc7XG4gIH1cbiAgZWxzZSBpZiAoKDMyID4gbGF0KSAmJiAobGF0ID49IDI0KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnUic7XG4gIH1cbiAgZWxzZSBpZiAoKDI0ID4gbGF0KSAmJiAobGF0ID49IDE2KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnUSc7XG4gIH1cbiAgZWxzZSBpZiAoKDE2ID4gbGF0KSAmJiAobGF0ID49IDgpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdQJztcbiAgfVxuICBlbHNlIGlmICgoOCA+IGxhdCkgJiYgKGxhdCA+PSAwKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnTic7XG4gIH1cbiAgZWxzZSBpZiAoKDAgPiBsYXQpICYmIChsYXQgPj0gLTgpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdNJztcbiAgfVxuICBlbHNlIGlmICgoLTggPiBsYXQpICYmIChsYXQgPj0gLTE2KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnTCc7XG4gIH1cbiAgZWxzZSBpZiAoKC0xNiA+IGxhdCkgJiYgKGxhdCA+PSAtMjQpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdLJztcbiAgfVxuICBlbHNlIGlmICgoLTI0ID4gbGF0KSAmJiAobGF0ID49IC0zMikpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0onO1xuICB9XG4gIGVsc2UgaWYgKCgtMzIgPiBsYXQpICYmIChsYXQgPj0gLTQwKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnSCc7XG4gIH1cbiAgZWxzZSBpZiAoKC00MCA+IGxhdCkgJiYgKGxhdCA+PSAtNDgpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdHJztcbiAgfVxuICBlbHNlIGlmICgoLTQ4ID4gbGF0KSAmJiAobGF0ID49IC01NikpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0YnO1xuICB9XG4gIGVsc2UgaWYgKCgtNTYgPiBsYXQpICYmIChsYXQgPj0gLTY0KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnRSc7XG4gIH1cbiAgZWxzZSBpZiAoKC02NCA+IGxhdCkgJiYgKGxhdCA+PSAtNzIpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdEJztcbiAgfVxuICBlbHNlIGlmICgoLTcyID4gbGF0KSAmJiAobGF0ID49IC04MCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0MnO1xuICB9XG4gIHJldHVybiBMZXR0ZXJEZXNpZ25hdG9yO1xufVxuXG4vKipcbiAqIEVuY29kZXMgYSBVVE0gbG9jYXRpb24gYXMgTUdSUyBzdHJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB1dG0gQW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBlYXN0aW5nLCBub3J0aGluZyxcbiAqICAgICB6b25lTGV0dGVyLCB6b25lTnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gYWNjdXJhY3kgQWNjdXJhY3kgaW4gZGlnaXRzICgxLTUpLlxuICogQHJldHVybiB7c3RyaW5nfSBNR1JTIHN0cmluZyBmb3IgdGhlIGdpdmVuIFVUTSBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHV0bSwgYWNjdXJhY3kpIHtcbiAgLy8gcHJlcGVuZCB3aXRoIGxlYWRpbmcgemVyb2VzXG4gIHZhciBzZWFzdGluZyA9IFwiMDAwMDBcIiArIHV0bS5lYXN0aW5nLFxuICAgIHNub3J0aGluZyA9IFwiMDAwMDBcIiArIHV0bS5ub3J0aGluZztcblxuICByZXR1cm4gdXRtLnpvbmVOdW1iZXIgKyB1dG0uem9uZUxldHRlciArIGdldDEwMGtJRCh1dG0uZWFzdGluZywgdXRtLm5vcnRoaW5nLCB1dG0uem9uZU51bWJlcikgKyBzZWFzdGluZy5zdWJzdHIoc2Vhc3RpbmcubGVuZ3RoIC0gNSwgYWNjdXJhY3kpICsgc25vcnRoaW5nLnN1YnN0cihzbm9ydGhpbmcubGVuZ3RoIC0gNSwgYWNjdXJhY3kpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdHdvIGxldHRlciAxMDBrIGRlc2lnbmF0b3IgZm9yIGEgZ2l2ZW4gVVRNIGVhc3RpbmcsXG4gKiBub3J0aGluZyBhbmQgem9uZSBudW1iZXIgdmFsdWUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBlYXN0aW5nXG4gKiBAcGFyYW0ge251bWJlcn0gbm9ydGhpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSB6b25lTnVtYmVyXG4gKiBAcmV0dXJuIHRoZSB0d28gbGV0dGVyIDEwMGsgZGVzaWduYXRvciBmb3IgdGhlIGdpdmVuIFVUTSBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0MTAwa0lEKGVhc3RpbmcsIG5vcnRoaW5nLCB6b25lTnVtYmVyKSB7XG4gIHZhciBzZXRQYXJtID0gZ2V0MTAwa1NldEZvclpvbmUoem9uZU51bWJlcik7XG4gIHZhciBzZXRDb2x1bW4gPSBNYXRoLmZsb29yKGVhc3RpbmcgLyAxMDAwMDApO1xuICB2YXIgc2V0Um93ID0gTWF0aC5mbG9vcihub3J0aGluZyAvIDEwMDAwMCkgJSAyMDtcbiAgcmV0dXJuIGdldExldHRlcjEwMGtJRChzZXRDb2x1bW4sIHNldFJvdywgc2V0UGFybSk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBVVE0gem9uZSBudW1iZXIsIGZpZ3VyZSBvdXQgdGhlIE1HUlMgMTAwSyBzZXQgaXQgaXMgaW4uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpIEFuIFVUTSB6b25lIG51bWJlci5cbiAqIEByZXR1cm4ge251bWJlcn0gdGhlIDEwMGsgc2V0IHRoZSBVVE0gem9uZSBpcyBpbi5cbiAqL1xuZnVuY3Rpb24gZ2V0MTAwa1NldEZvclpvbmUoaSkge1xuICB2YXIgc2V0UGFybSA9IGkgJSBOVU1fMTAwS19TRVRTO1xuICBpZiAoc2V0UGFybSA9PT0gMCkge1xuICAgIHNldFBhcm0gPSBOVU1fMTAwS19TRVRTO1xuICB9XG5cbiAgcmV0dXJuIHNldFBhcm07XG59XG5cbi8qKlxuICogR2V0IHRoZSB0d28tbGV0dGVyIE1HUlMgMTAwayBkZXNpZ25hdG9yIGdpdmVuIGluZm9ybWF0aW9uXG4gKiB0cmFuc2xhdGVkIGZyb20gdGhlIFVUTSBub3J0aGluZywgZWFzdGluZyBhbmQgem9uZSBudW1iZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gdGhlIGNvbHVtbiBpbmRleCBhcyBpdCByZWxhdGVzIHRvIHRoZSBNR1JTXG4gKiAgICAgICAgMTAwayBzZXQgc3ByZWFkc2hlZXQsIGNyZWF0ZWQgZnJvbSB0aGUgVVRNIGVhc3RpbmcuXG4gKiAgICAgICAgVmFsdWVzIGFyZSAxLTguXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IHRoZSByb3cgaW5kZXggYXMgaXQgcmVsYXRlcyB0byB0aGUgTUdSUyAxMDBrIHNldFxuICogICAgICAgIHNwcmVhZHNoZWV0LCBjcmVhdGVkIGZyb20gdGhlIFVUTSBub3J0aGluZyB2YWx1ZS4gVmFsdWVzXG4gKiAgICAgICAgYXJlIGZyb20gMC0xOS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwYXJtIHRoZSBzZXQgYmxvY2ssIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIE1HUlMgMTAwayBzZXRcbiAqICAgICAgICBzcHJlYWRzaGVldCwgY3JlYXRlZCBmcm9tIHRoZSBVVE0gem9uZS4gVmFsdWVzIGFyZSBmcm9tXG4gKiAgICAgICAgMS02MC5cbiAqIEByZXR1cm4gdHdvIGxldHRlciBNR1JTIDEwMGsgY29kZS5cbiAqL1xuZnVuY3Rpb24gZ2V0TGV0dGVyMTAwa0lEKGNvbHVtbiwgcm93LCBwYXJtKSB7XG4gIC8vIGNvbE9yaWdpbiBhbmQgcm93T3JpZ2luIGFyZSB0aGUgbGV0dGVycyBhdCB0aGUgb3JpZ2luIG9mIHRoZSBzZXRcbiAgdmFyIGluZGV4ID0gcGFybSAtIDE7XG4gIHZhciBjb2xPcmlnaW4gPSBTRVRfT1JJR0lOX0NPTFVNTl9MRVRURVJTLmNoYXJDb2RlQXQoaW5kZXgpO1xuICB2YXIgcm93T3JpZ2luID0gU0VUX09SSUdJTl9ST1dfTEVUVEVSUy5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAvLyBjb2xJbnQgYW5kIHJvd0ludCBhcmUgdGhlIGxldHRlcnMgdG8gYnVpbGQgdG8gcmV0dXJuXG4gIHZhciBjb2xJbnQgPSBjb2xPcmlnaW4gKyBjb2x1bW4gLSAxO1xuICB2YXIgcm93SW50ID0gcm93T3JpZ2luICsgcm93O1xuICB2YXIgcm9sbG92ZXIgPSBmYWxzZTtcblxuICBpZiAoY29sSW50ID4gWikge1xuICAgIGNvbEludCA9IGNvbEludCAtIFogKyBBIC0gMTtcbiAgICByb2xsb3ZlciA9IHRydWU7XG4gIH1cblxuICBpZiAoY29sSW50ID09PSBJIHx8IChjb2xPcmlnaW4gPCBJICYmIGNvbEludCA+IEkpIHx8ICgoY29sSW50ID4gSSB8fCBjb2xPcmlnaW4gPCBJKSAmJiByb2xsb3ZlcikpIHtcbiAgICBjb2xJbnQrKztcbiAgfVxuXG4gIGlmIChjb2xJbnQgPT09IE8gfHwgKGNvbE9yaWdpbiA8IE8gJiYgY29sSW50ID4gTykgfHwgKChjb2xJbnQgPiBPIHx8IGNvbE9yaWdpbiA8IE8pICYmIHJvbGxvdmVyKSkge1xuICAgIGNvbEludCsrO1xuXG4gICAgaWYgKGNvbEludCA9PT0gSSkge1xuICAgICAgY29sSW50Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbEludCA+IFopIHtcbiAgICBjb2xJbnQgPSBjb2xJbnQgLSBaICsgQSAtIDE7XG4gIH1cblxuICBpZiAocm93SW50ID4gVikge1xuICAgIHJvd0ludCA9IHJvd0ludCAtIFYgKyBBIC0gMTtcbiAgICByb2xsb3ZlciA9IHRydWU7XG4gIH1cbiAgZWxzZSB7XG4gICAgcm9sbG92ZXIgPSBmYWxzZTtcbiAgfVxuXG4gIGlmICgoKHJvd0ludCA9PT0gSSkgfHwgKChyb3dPcmlnaW4gPCBJKSAmJiAocm93SW50ID4gSSkpKSB8fCAoKChyb3dJbnQgPiBJKSB8fCAocm93T3JpZ2luIDwgSSkpICYmIHJvbGxvdmVyKSkge1xuICAgIHJvd0ludCsrO1xuICB9XG5cbiAgaWYgKCgocm93SW50ID09PSBPKSB8fCAoKHJvd09yaWdpbiA8IE8pICYmIChyb3dJbnQgPiBPKSkpIHx8ICgoKHJvd0ludCA+IE8pIHx8IChyb3dPcmlnaW4gPCBPKSkgJiYgcm9sbG92ZXIpKSB7XG4gICAgcm93SW50Kys7XG5cbiAgICBpZiAocm93SW50ID09PSBJKSB7XG4gICAgICByb3dJbnQrKztcbiAgICB9XG4gIH1cblxuICBpZiAocm93SW50ID4gVikge1xuICAgIHJvd0ludCA9IHJvd0ludCAtIFYgKyBBIC0gMTtcbiAgfVxuXG4gIHZhciB0d29MZXR0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvbEludCkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHJvd0ludCk7XG4gIHJldHVybiB0d29MZXR0ZXI7XG59XG5cbi8qKlxuICogRGVjb2RlIHRoZSBVVE0gcGFyYW1ldGVycyBmcm9tIGEgTUdSUyBzdHJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZ3JzU3RyaW5nIGFuIFVQUEVSQ0FTRSBjb29yZGluYXRlIHN0cmluZyBpcyBleHBlY3RlZC5cbiAqIEByZXR1cm4ge29iamVjdH0gQW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBlYXN0aW5nLCBub3J0aGluZywgem9uZUxldHRlcixcbiAqICAgICB6b25lTnVtYmVyIGFuZCBhY2N1cmFjeSAoaW4gbWV0ZXJzKSBwcm9wZXJ0aWVzLlxuICovXG5mdW5jdGlvbiBkZWNvZGUobWdyc1N0cmluZykge1xuXG4gIGlmIChtZ3JzU3RyaW5nICYmIG1ncnNTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IGNvdmVydGluZyBmcm9tIG5vdGhpbmdcIik7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gbWdyc1N0cmluZy5sZW5ndGg7XG5cbiAgdmFyIGh1bksgPSBudWxsO1xuICB2YXIgc2IgPSBcIlwiO1xuICB2YXIgdGVzdENoYXI7XG4gIHZhciBpID0gMDtcblxuICAvLyBnZXQgWm9uZSBudW1iZXJcbiAgd2hpbGUgKCEoL1tBLVpdLykudGVzdCh0ZXN0Q2hhciA9IG1ncnNTdHJpbmcuY2hhckF0KGkpKSkge1xuICAgIGlmIChpID49IDIpIHtcbiAgICAgIHRocm93IChcIk1HUlNQb2ludCBiYWQgY29udmVyc2lvbiBmcm9tOiBcIiArIG1ncnNTdHJpbmcpO1xuICAgIH1cbiAgICBzYiArPSB0ZXN0Q2hhcjtcbiAgICBpKys7XG4gIH1cblxuICB2YXIgem9uZU51bWJlciA9IHBhcnNlSW50KHNiLCAxMCk7XG5cbiAgaWYgKGkgPT09IDAgfHwgaSArIDMgPiBsZW5ndGgpIHtcbiAgICAvLyBBIGdvb2QgTUdSUyBzdHJpbmcgaGFzIHRvIGJlIDQtNSBkaWdpdHMgbG9uZyxcbiAgICAvLyAjI0FBQS8jQUFBIGF0IGxlYXN0LlxuICAgIHRocm93IChcIk1HUlNQb2ludCBiYWQgY29udmVyc2lvbiBmcm9tOiBcIiArIG1ncnNTdHJpbmcpO1xuICB9XG5cbiAgdmFyIHpvbmVMZXR0ZXIgPSBtZ3JzU3RyaW5nLmNoYXJBdChpKyspO1xuXG4gIC8vIFNob3VsZCB3ZSBjaGVjayB0aGUgem9uZSBsZXR0ZXIgaGVyZT8gV2h5IG5vdC5cbiAgaWYgKHpvbmVMZXR0ZXIgPD0gJ0EnIHx8IHpvbmVMZXR0ZXIgPT09ICdCJyB8fCB6b25lTGV0dGVyID09PSAnWScgfHwgem9uZUxldHRlciA+PSAnWicgfHwgem9uZUxldHRlciA9PT0gJ0knIHx8IHpvbmVMZXR0ZXIgPT09ICdPJykge1xuICAgIHRocm93IChcIk1HUlNQb2ludCB6b25lIGxldHRlciBcIiArIHpvbmVMZXR0ZXIgKyBcIiBub3QgaGFuZGxlZDogXCIgKyBtZ3JzU3RyaW5nKTtcbiAgfVxuXG4gIGh1bksgPSBtZ3JzU3RyaW5nLnN1YnN0cmluZyhpLCBpICs9IDIpO1xuXG4gIHZhciBzZXQgPSBnZXQxMDBrU2V0Rm9yWm9uZSh6b25lTnVtYmVyKTtcblxuICB2YXIgZWFzdDEwMGsgPSBnZXRFYXN0aW5nRnJvbUNoYXIoaHVuSy5jaGFyQXQoMCksIHNldCk7XG4gIHZhciBub3J0aDEwMGsgPSBnZXROb3J0aGluZ0Zyb21DaGFyKGh1bksuY2hhckF0KDEpLCBzZXQpO1xuXG4gIC8vIFdlIGhhdmUgYSBidWcgd2hlcmUgdGhlIG5vcnRoaW5nIG1heSBiZSAyMDAwMDAwIHRvbyBsb3cuXG4gIC8vIEhvd1xuICAvLyBkbyB3ZSBrbm93IHdoZW4gdG8gcm9sbCBvdmVyP1xuXG4gIHdoaWxlIChub3J0aDEwMGsgPCBnZXRNaW5Ob3J0aGluZyh6b25lTGV0dGVyKSkge1xuICAgIG5vcnRoMTAwayArPSAyMDAwMDAwO1xuICB9XG5cbiAgLy8gY2FsY3VsYXRlIHRoZSBjaGFyIGluZGV4IGZvciBlYXN0aW5nL25vcnRoaW5nIHNlcGFyYXRvclxuICB2YXIgcmVtYWluZGVyID0gbGVuZ3RoIC0gaTtcblxuICBpZiAocmVtYWluZGVyICUgMiAhPT0gMCkge1xuICAgIHRocm93IChcIk1HUlNQb2ludCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBcXG5vZiBkaWdpdHMgYWZ0ZXIgdGhlIHpvbmUgbGV0dGVyIGFuZCB0d28gMTAwa20gbGV0dGVycyAtIGZyb250IFxcbmhhbGYgZm9yIGVhc3RpbmcgbWV0ZXJzLCBzZWNvbmQgaGFsZiBmb3IgXFxubm9ydGhpbmcgbWV0ZXJzXCIgKyBtZ3JzU3RyaW5nKTtcbiAgfVxuXG4gIHZhciBzZXAgPSByZW1haW5kZXIgLyAyO1xuXG4gIHZhciBzZXBFYXN0aW5nID0gMC4wO1xuICB2YXIgc2VwTm9ydGhpbmcgPSAwLjA7XG4gIHZhciBhY2N1cmFjeUJvbnVzLCBzZXBFYXN0aW5nU3RyaW5nLCBzZXBOb3J0aGluZ1N0cmluZywgZWFzdGluZywgbm9ydGhpbmc7XG4gIGlmIChzZXAgPiAwKSB7XG4gICAgYWNjdXJhY3lCb251cyA9IDEwMDAwMC4wIC8gTWF0aC5wb3coMTAsIHNlcCk7XG4gICAgc2VwRWFzdGluZ1N0cmluZyA9IG1ncnNTdHJpbmcuc3Vic3RyaW5nKGksIGkgKyBzZXApO1xuICAgIHNlcEVhc3RpbmcgPSBwYXJzZUZsb2F0KHNlcEVhc3RpbmdTdHJpbmcpICogYWNjdXJhY3lCb251cztcbiAgICBzZXBOb3J0aGluZ1N0cmluZyA9IG1ncnNTdHJpbmcuc3Vic3RyaW5nKGkgKyBzZXApO1xuICAgIHNlcE5vcnRoaW5nID0gcGFyc2VGbG9hdChzZXBOb3J0aGluZ1N0cmluZykgKiBhY2N1cmFjeUJvbnVzO1xuICB9XG5cbiAgZWFzdGluZyA9IHNlcEVhc3RpbmcgKyBlYXN0MTAwaztcbiAgbm9ydGhpbmcgPSBzZXBOb3J0aGluZyArIG5vcnRoMTAwaztcblxuICByZXR1cm4ge1xuICAgIGVhc3Rpbmc6IGVhc3RpbmcsXG4gICAgbm9ydGhpbmc6IG5vcnRoaW5nLFxuICAgIHpvbmVMZXR0ZXI6IHpvbmVMZXR0ZXIsXG4gICAgem9uZU51bWJlcjogem9uZU51bWJlcixcbiAgICBhY2N1cmFjeTogYWNjdXJhY3lCb251c1xuICB9O1xufVxuXG4vKipcbiAqIEdpdmVuIHRoZSBmaXJzdCBsZXR0ZXIgZnJvbSBhIHR3by1sZXR0ZXIgTUdSUyAxMDBrIHpvbmUsIGFuZCBnaXZlbiB0aGVcbiAqIE1HUlMgdGFibGUgc2V0IGZvciB0aGUgem9uZSBudW1iZXIsIGZpZ3VyZSBvdXQgdGhlIGVhc3RpbmcgdmFsdWUgdGhhdFxuICogc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBvdGhlciwgc2Vjb25kYXJ5IGVhc3RpbmcgdmFsdWUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Y2hhcn0gZSBUaGUgZmlyc3QgbGV0dGVyIGZyb20gYSB0d28tbGV0dGVyIE1HUlMgMTAwwrRrIHpvbmUuXG4gKiBAcGFyYW0ge251bWJlcn0gc2V0IFRoZSBNR1JTIHRhYmxlIHNldCBmb3IgdGhlIHpvbmUgbnVtYmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgZWFzdGluZyB2YWx1ZSBmb3IgdGhlIGdpdmVuIGxldHRlciBhbmQgc2V0LlxuICovXG5mdW5jdGlvbiBnZXRFYXN0aW5nRnJvbUNoYXIoZSwgc2V0KSB7XG4gIC8vIGNvbE9yaWdpbiBpcyB0aGUgbGV0dGVyIGF0IHRoZSBvcmlnaW4gb2YgdGhlIHNldCBmb3IgdGhlXG4gIC8vIGNvbHVtblxuICB2YXIgY3VyQ29sID0gU0VUX09SSUdJTl9DT0xVTU5fTEVUVEVSUy5jaGFyQ29kZUF0KHNldCAtIDEpO1xuICB2YXIgZWFzdGluZ1ZhbHVlID0gMTAwMDAwLjA7XG4gIHZhciByZXdpbmRNYXJrZXIgPSBmYWxzZTtcblxuICB3aGlsZSAoY3VyQ29sICE9PSBlLmNoYXJDb2RlQXQoMCkpIHtcbiAgICBjdXJDb2wrKztcbiAgICBpZiAoY3VyQ29sID09PSBJKSB7XG4gICAgICBjdXJDb2wrKztcbiAgICB9XG4gICAgaWYgKGN1ckNvbCA9PT0gTykge1xuICAgICAgY3VyQ29sKys7XG4gICAgfVxuICAgIGlmIChjdXJDb2wgPiBaKSB7XG4gICAgICBpZiAocmV3aW5kTWFya2VyKSB7XG4gICAgICAgIHRocm93IChcIkJhZCBjaGFyYWN0ZXI6IFwiICsgZSk7XG4gICAgICB9XG4gICAgICBjdXJDb2wgPSBBO1xuICAgICAgcmV3aW5kTWFya2VyID0gdHJ1ZTtcbiAgICB9XG4gICAgZWFzdGluZ1ZhbHVlICs9IDEwMDAwMC4wO1xuICB9XG5cbiAgcmV0dXJuIGVhc3RpbmdWYWx1ZTtcbn1cblxuLyoqXG4gKiBHaXZlbiB0aGUgc2Vjb25kIGxldHRlciBmcm9tIGEgdHdvLWxldHRlciBNR1JTIDEwMGsgem9uZSwgYW5kIGdpdmVuIHRoZVxuICogTUdSUyB0YWJsZSBzZXQgZm9yIHRoZSB6b25lIG51bWJlciwgZmlndXJlIG91dCB0aGUgbm9ydGhpbmcgdmFsdWUgdGhhdFxuICogc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBvdGhlciwgc2Vjb25kYXJ5IG5vcnRoaW5nIHZhbHVlLiBZb3UgaGF2ZSB0b1xuICogcmVtZW1iZXIgdGhhdCBOb3J0aGluZ3MgYXJlIGRldGVybWluZWQgZnJvbSB0aGUgZXF1YXRvciwgYW5kIHRoZSB2ZXJ0aWNhbFxuICogY3ljbGUgb2YgbGV0dGVycyBtZWFuIGEgMjAwMDAwMCBhZGRpdGlvbmFsIG5vcnRoaW5nIG1ldGVycy4gVGhpcyBoYXBwZW5zXG4gKiBhcHByb3guIGV2ZXJ5IDE4IGRlZ3JlZXMgb2YgbGF0aXR1ZGUuIFRoaXMgbWV0aG9kIGRvZXMgKk5PVCogY291bnQgYW55XG4gKiBhZGRpdGlvbmFsIG5vcnRoaW5ncy4gWW91IGhhdmUgdG8gZmlndXJlIG91dCBob3cgbWFueSAyMDAwMDAwIG1ldGVycyBuZWVkXG4gKiB0byBiZSBhZGRlZCBmb3IgdGhlIHpvbmUgbGV0dGVyIG9mIHRoZSBNR1JTIGNvb3JkaW5hdGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Y2hhcn0gbiBTZWNvbmQgbGV0dGVyIG9mIHRoZSBNR1JTIDEwMGsgem9uZVxuICogQHBhcmFtIHtudW1iZXJ9IHNldCBUaGUgTUdSUyB0YWJsZSBzZXQgbnVtYmVyLCB3aGljaCBpcyBkZXBlbmRlbnQgb24gdGhlXG4gKiAgICAgVVRNIHpvbmUgbnVtYmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbm9ydGhpbmcgdmFsdWUgZm9yIHRoZSBnaXZlbiBsZXR0ZXIgYW5kIHNldC5cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9ydGhpbmdGcm9tQ2hhcihuLCBzZXQpIHtcblxuICBpZiAobiA+ICdWJykge1xuICAgIHRocm93IChcIk1HUlNQb2ludCBnaXZlbiBpbnZhbGlkIE5vcnRoaW5nIFwiICsgbik7XG4gIH1cblxuICAvLyByb3dPcmlnaW4gaXMgdGhlIGxldHRlciBhdCB0aGUgb3JpZ2luIG9mIHRoZSBzZXQgZm9yIHRoZVxuICAvLyBjb2x1bW5cbiAgdmFyIGN1clJvdyA9IFNFVF9PUklHSU5fUk9XX0xFVFRFUlMuY2hhckNvZGVBdChzZXQgLSAxKTtcbiAgdmFyIG5vcnRoaW5nVmFsdWUgPSAwLjA7XG4gIHZhciByZXdpbmRNYXJrZXIgPSBmYWxzZTtcblxuICB3aGlsZSAoY3VyUm93ICE9PSBuLmNoYXJDb2RlQXQoMCkpIHtcbiAgICBjdXJSb3crKztcbiAgICBpZiAoY3VyUm93ID09PSBJKSB7XG4gICAgICBjdXJSb3crKztcbiAgICB9XG4gICAgaWYgKGN1clJvdyA9PT0gTykge1xuICAgICAgY3VyUm93Kys7XG4gICAgfVxuICAgIC8vIGZpeGluZyBhIGJ1ZyBtYWtpbmcgd2hvbGUgYXBwbGljYXRpb24gaGFuZyBpbiB0aGlzIGxvb3BcbiAgICAvLyB3aGVuICduJyBpcyBhIHdyb25nIGNoYXJhY3RlclxuICAgIGlmIChjdXJSb3cgPiBWKSB7XG4gICAgICBpZiAocmV3aW5kTWFya2VyKSB7IC8vIG1ha2luZyBzdXJlIHRoYXQgdGhpcyBsb29wIGVuZHNcbiAgICAgICAgdGhyb3cgKFwiQmFkIGNoYXJhY3RlcjogXCIgKyBuKTtcbiAgICAgIH1cbiAgICAgIGN1clJvdyA9IEE7XG4gICAgICByZXdpbmRNYXJrZXIgPSB0cnVlO1xuICAgIH1cbiAgICBub3J0aGluZ1ZhbHVlICs9IDEwMDAwMC4wO1xuICB9XG5cbiAgcmV0dXJuIG5vcnRoaW5nVmFsdWU7XG59XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIGdldE1pbk5vcnRoaW5nIHJldHVybnMgdGhlIG1pbmltdW0gbm9ydGhpbmcgdmFsdWUgb2YgYSBNR1JTXG4gKiB6b25lLlxuICpcbiAqIFBvcnRlZCBmcm9tIEdlb3RyYW5zJyBjIExhdHRpdHVkZV9CYW5kX1ZhbHVlIHN0cnVjdHVyZSB0YWJsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtjaGFyfSB6b25lTGV0dGVyIFRoZSBNR1JTIHpvbmUgdG8gZ2V0IHRoZSBtaW4gbm9ydGhpbmcgZm9yLlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRNaW5Ob3J0aGluZyh6b25lTGV0dGVyKSB7XG4gIHZhciBub3J0aGluZztcbiAgc3dpdGNoICh6b25lTGV0dGVyKSB7XG4gIGNhc2UgJ0MnOlxuICAgIG5vcnRoaW5nID0gMTEwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdEJzpcbiAgICBub3J0aGluZyA9IDIwMDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnRSc6XG4gICAgbm9ydGhpbmcgPSAyODAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ0YnOlxuICAgIG5vcnRoaW5nID0gMzcwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdHJzpcbiAgICBub3J0aGluZyA9IDQ2MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnSCc6XG4gICAgbm9ydGhpbmcgPSA1NTAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ0onOlxuICAgIG5vcnRoaW5nID0gNjQwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdLJzpcbiAgICBub3J0aGluZyA9IDczMDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnTCc6XG4gICAgbm9ydGhpbmcgPSA4MjAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ00nOlxuICAgIG5vcnRoaW5nID0gOTEwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdOJzpcbiAgICBub3J0aGluZyA9IDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnUCc6XG4gICAgbm9ydGhpbmcgPSA4MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnUSc6XG4gICAgbm9ydGhpbmcgPSAxNzAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ1InOlxuICAgIG5vcnRoaW5nID0gMjYwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdTJzpcbiAgICBub3J0aGluZyA9IDM1MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnVCc6XG4gICAgbm9ydGhpbmcgPSA0NDAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ1UnOlxuICAgIG5vcnRoaW5nID0gNTMwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdWJzpcbiAgICBub3J0aGluZyA9IDYyMDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnVyc6XG4gICAgbm9ydGhpbmcgPSA3MDAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ1gnOlxuICAgIG5vcnRoaW5nID0gNzkwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIG5vcnRoaW5nID0gLTEuMDtcbiAgfVxuICBpZiAobm9ydGhpbmcgPj0gMC4wKSB7XG4gICAgcmV0dXJuIG5vcnRoaW5nO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IChcIkludmFsaWQgem9uZSBsZXR0ZXI6IFwiICsgem9uZUxldHRlcik7XG4gIH1cblxufVxuIiwiaW1wb3J0IHt0b1BvaW50LCBmb3J3YXJkfSBmcm9tICdtZ3JzJztcblxuZnVuY3Rpb24gUG9pbnQoeCwgeSwgeikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUG9pbnQpKSB7XG4gICAgcmV0dXJuIG5ldyBQb2ludCh4LCB5LCB6KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHRoaXMueCA9IHhbMF07XG4gICAgdGhpcy55ID0geFsxXTtcbiAgICB0aGlzLnogPSB4WzJdIHx8IDAuMDtcbiAgfSBlbHNlIGlmKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xuICAgIHRoaXMueCA9IHgueDtcbiAgICB0aGlzLnkgPSB4Lnk7XG4gICAgdGhpcy56ID0geC56IHx8IDAuMDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGNvb3JkcyA9IHguc3BsaXQoJywnKTtcbiAgICB0aGlzLnggPSBwYXJzZUZsb2F0KGNvb3Jkc1swXSwgMTApO1xuICAgIHRoaXMueSA9IHBhcnNlRmxvYXQoY29vcmRzWzFdLCAxMCk7XG4gICAgdGhpcy56ID0gcGFyc2VGbG9hdChjb29yZHNbMl0sIDEwKSB8fCAwLjA7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICAgIHRoaXMueiA9IHogfHwgMC4wO1xuICB9XG4gIGNvbnNvbGUud2FybigncHJvajQuUG9pbnQgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gMywgdXNlIHByb2o0LnRvUG9pbnQnKTtcbn1cblxuUG9pbnQuZnJvbU1HUlMgPSBmdW5jdGlvbihtZ3JzU3RyKSB7XG4gIHJldHVybiBuZXcgUG9pbnQodG9Qb2ludChtZ3JzU3RyKSk7XG59O1xuUG9pbnQucHJvdG90eXBlLnRvTUdSUyA9IGZ1bmN0aW9uKGFjY3VyYWN5KSB7XG4gIHJldHVybiBmb3J3YXJkKFt0aGlzLngsIHRoaXMueV0sIGFjY3VyYWN5KTtcbn07XG5leHBvcnQgZGVmYXVsdCBQb2ludDtcbiIsInZhciBDMDAgPSAxO1xudmFyIEMwMiA9IDAuMjU7XG52YXIgQzA0ID0gMC4wNDY4NzU7XG52YXIgQzA2ID0gMC4wMTk1MzEyNTtcbnZhciBDMDggPSAwLjAxMDY4MTE1MjM0Mzc1O1xudmFyIEMyMiA9IDAuNzU7XG52YXIgQzQ0ID0gMC40Njg3NTtcbnZhciBDNDYgPSAwLjAxMzAyMDgzMzMzMzMzMzMzMzMzO1xudmFyIEM0OCA9IDAuMDA3MTIwNzY4MjI5MTY2NjY2NjY7XG52YXIgQzY2ID0gMC4zNjQ1ODMzMzMzMzMzMzMzMzMzMztcbnZhciBDNjggPSAwLjAwNTY5NjYxNDU4MzMzMzMzMzMzO1xudmFyIEM4OCA9IDAuMzA3NjE3MTg3NTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZXMpIHtcbiAgdmFyIGVuID0gW107XG4gIGVuWzBdID0gQzAwIC0gZXMgKiAoQzAyICsgZXMgKiAoQzA0ICsgZXMgKiAoQzA2ICsgZXMgKiBDMDgpKSk7XG4gIGVuWzFdID0gZXMgKiAoQzIyIC0gZXMgKiAoQzA0ICsgZXMgKiAoQzA2ICsgZXMgKiBDMDgpKSk7XG4gIHZhciB0ID0gZXMgKiBlcztcbiAgZW5bMl0gPSB0ICogKEM0NCAtIGVzICogKEM0NiArIGVzICogQzQ4KSk7XG4gIHQgKj0gZXM7XG4gIGVuWzNdID0gdCAqIChDNjYgLSBlcyAqIEM2OCk7XG4gIGVuWzRdID0gdCAqIGVzICogQzg4O1xuICByZXR1cm4gZW47XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocGhpLCBzcGhpLCBjcGhpLCBlbikge1xuICBjcGhpICo9IHNwaGk7XG4gIHNwaGkgKj0gc3BoaTtcbiAgcmV0dXJuIChlblswXSAqIHBoaSAtIGNwaGkgKiAoZW5bMV0gKyBzcGhpICogKGVuWzJdICsgc3BoaSAqIChlblszXSArIHNwaGkgKiBlbls0XSkpKSk7XG59IiwiaW1wb3J0IHBqX21sZm4gZnJvbSBcIi4vcGpfbWxmblwiO1xuaW1wb3J0IHtFUFNMTn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbnZhciBNQVhfSVRFUiA9IDIwO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhcmcsIGVzLCBlbikge1xuICB2YXIgayA9IDEgLyAoMSAtIGVzKTtcbiAgdmFyIHBoaSA9IGFyZztcbiAgZm9yICh2YXIgaSA9IE1BWF9JVEVSOyBpOyAtLWkpIHsgLyogcmFyZWx5IGdvZXMgb3ZlciAyIGl0ZXJhdGlvbnMgKi9cbiAgICB2YXIgcyA9IE1hdGguc2luKHBoaSk7XG4gICAgdmFyIHQgPSAxIC0gZXMgKiBzICogcztcbiAgICAvL3QgPSB0aGlzLnBqX21sZm4ocGhpLCBzLCBNYXRoLmNvcyhwaGkpLCBlbikgLSBhcmc7XG4gICAgLy9waGkgLT0gdCAqICh0ICogTWF0aC5zcXJ0KHQpKSAqIGs7XG4gICAgdCA9IChwal9tbGZuKHBoaSwgcywgTWF0aC5jb3MocGhpKSwgZW4pIC0gYXJnKSAqICh0ICogTWF0aC5zcXJ0KHQpKSAqIGs7XG4gICAgcGhpIC09IHQ7XG4gICAgaWYgKE1hdGguYWJzKHQpIDwgRVBTTE4pIHtcbiAgICAgIHJldHVybiBwaGk7XG4gICAgfVxuICB9XG4gIC8vLi5yZXBvcnRFcnJvcihcImNhc3M6cGpfaW52X21sZm46IENvbnZlcmdlbmNlIGVycm9yXCIpO1xuICByZXR1cm4gcGhpO1xufVxuIiwiLy8gSGVhdmlseSBiYXNlZCBvbiB0aGlzIHRtZXJjIHByb2plY3Rpb24gaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYmxvY2gvbWFwc2hhcGVyLXByb2ovYmxvYi9tYXN0ZXIvc3JjL3Byb2plY3Rpb25zL3RtZXJjLmpzXG5cbmltcG9ydCBwal9lbmZuIGZyb20gJy4uL2NvbW1vbi9wal9lbmZuJztcbmltcG9ydCBwal9tbGZuIGZyb20gJy4uL2NvbW1vbi9wal9tbGZuJztcbmltcG9ydCBwal9pbnZfbWxmbiBmcm9tICcuLi9jb21tb24vcGpfaW52X21sZm4nO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5pbXBvcnQge0VQU0xOLCBIQUxGX1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCBzaWduIGZyb20gJy4uL2NvbW1vbi9zaWduJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHRoaXMueDAgPSB0aGlzLngwICE9PSB1bmRlZmluZWQgPyB0aGlzLngwIDogMDtcbiAgdGhpcy55MCA9IHRoaXMueTAgIT09IHVuZGVmaW5lZCA/IHRoaXMueTAgOiAwO1xuICB0aGlzLmxvbmcwID0gdGhpcy5sb25nMCAhPT0gdW5kZWZpbmVkID8gdGhpcy5sb25nMCA6IDA7XG4gIHRoaXMubGF0MCA9IHRoaXMubGF0MCAhPT0gdW5kZWZpbmVkID8gdGhpcy5sYXQwIDogMDtcblxuICBpZiAodGhpcy5lcykge1xuICAgIHRoaXMuZW4gPSBwal9lbmZuKHRoaXMuZXMpO1xuICAgIHRoaXMubWwwID0gcGpfbWxmbih0aGlzLmxhdDAsIE1hdGguc2luKHRoaXMubGF0MCksIE1hdGguY29zKHRoaXMubGF0MCksIHRoaXMuZW4pO1xuICB9XG59XG5cbi8qKlxuICAgIFRyYW5zdmVyc2UgTWVyY2F0b3IgRm9yd2FyZCAgLSBsb25nL2xhdCB0byB4L3lcbiAgICBsb25nL2xhdCBpbiByYWRpYW5zXG4gICovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG5cbiAgdmFyIGRlbHRhX2xvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciBjb247XG4gIHZhciB4LCB5O1xuICB2YXIgc2luX3BoaSA9IE1hdGguc2luKGxhdCk7XG4gIHZhciBjb3NfcGhpID0gTWF0aC5jb3MobGF0KTtcblxuICBpZiAoIXRoaXMuZXMpIHtcbiAgICB2YXIgYiA9IGNvc19waGkgKiBNYXRoLnNpbihkZWx0YV9sb24pO1xuXG4gICAgaWYgKChNYXRoLmFicyhNYXRoLmFicyhiKSAtIDEpKSA8IEVQU0xOKSB7XG4gICAgICByZXR1cm4gKDkzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB4ID0gMC41ICogdGhpcy5hICogdGhpcy5rMCAqIE1hdGgubG9nKCgxICsgYikgLyAoMSAtIGIpKSArIHRoaXMueDA7XG4gICAgICB5ID0gY29zX3BoaSAqIE1hdGguY29zKGRlbHRhX2xvbikgLyBNYXRoLnNxcnQoMSAtIE1hdGgucG93KGIsIDIpKTtcbiAgICAgIGIgPSBNYXRoLmFicyh5KTtcblxuICAgICAgaWYgKGIgPj0gMSkge1xuICAgICAgICBpZiAoKGIgLSAxKSA+IEVQU0xOKSB7XG4gICAgICAgICAgcmV0dXJuICg5Myk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgeSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB5ID0gTWF0aC5hY29zKHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobGF0IDwgMCkge1xuICAgICAgICB5ID0gLXk7XG4gICAgICB9XG5cbiAgICAgIHkgPSB0aGlzLmEgKiB0aGlzLmswICogKHkgLSB0aGlzLmxhdDApICsgdGhpcy55MDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIGFsID0gY29zX3BoaSAqIGRlbHRhX2xvbjtcbiAgICB2YXIgYWxzID0gTWF0aC5wb3coYWwsIDIpO1xuICAgIHZhciBjID0gdGhpcy5lcDIgKiBNYXRoLnBvdyhjb3NfcGhpLCAyKTtcbiAgICB2YXIgY3MgPSBNYXRoLnBvdyhjLCAyKTtcbiAgICB2YXIgdHEgPSBNYXRoLmFicyhjb3NfcGhpKSA+IEVQU0xOID8gTWF0aC50YW4obGF0KSA6IDA7XG4gICAgdmFyIHQgPSBNYXRoLnBvdyh0cSwgMik7XG4gICAgdmFyIHRzID0gTWF0aC5wb3codCwgMik7XG4gICAgY29uID0gMSAtIHRoaXMuZXMgKiBNYXRoLnBvdyhzaW5fcGhpLCAyKTtcbiAgICBhbCA9IGFsIC8gTWF0aC5zcXJ0KGNvbik7XG4gICAgdmFyIG1sID0gcGpfbWxmbihsYXQsIHNpbl9waGksIGNvc19waGksIHRoaXMuZW4pO1xuXG4gICAgeCA9IHRoaXMuYSAqICh0aGlzLmswICogYWwgKiAoMSArXG4gICAgICBhbHMgLyA2ICogKDEgLSB0ICsgYyArXG4gICAgICBhbHMgLyAyMCAqICg1IC0gMTggKiB0ICsgdHMgKyAxNCAqIGMgLSA1OCAqIHQgKiBjICtcbiAgICAgIGFscyAvIDQyICogKDYxICsgMTc5ICogdHMgLSB0cyAqIHQgLSA0NzkgKiB0KSkpKSkgK1xuICAgICAgdGhpcy54MDtcblxuICAgIHkgPSB0aGlzLmEgKiAodGhpcy5rMCAqIChtbCAtIHRoaXMubWwwICtcbiAgICAgIHNpbl9waGkgKiBkZWx0YV9sb24gKiBhbCAvIDIgKiAoMSArXG4gICAgICBhbHMgLyAxMiAqICg1IC0gdCArIDkgKiBjICsgNCAqIGNzICtcbiAgICAgIGFscyAvIDMwICogKDYxICsgdHMgLSA1OCAqIHQgKyAyNzAgKiBjIC0gMzMwICogdCAqIGMgK1xuICAgICAgYWxzIC8gNTYgKiAoMTM4NSArIDU0MyAqIHRzIC0gdHMgKiB0IC0gMzExMSAqIHQpKSkpKSkgK1xuICAgICAgdGhpcy55MDtcbiAgfVxuXG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG5cbiAgcmV0dXJuIHA7XG59XG5cbi8qKlxuICAgIFRyYW5zdmVyc2UgTWVyY2F0b3IgSW52ZXJzZSAgLSAgeC95IHRvIGxvbmcvbGF0XG4gICovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBjb24sIHBoaTtcbiAgdmFyIGxhdCwgbG9uO1xuICB2YXIgeCA9IChwLnggLSB0aGlzLngwKSAqICgxIC8gdGhpcy5hKTtcbiAgdmFyIHkgPSAocC55IC0gdGhpcy55MCkgKiAoMSAvIHRoaXMuYSk7XG5cbiAgaWYgKCF0aGlzLmVzKSB7XG4gICAgdmFyIGYgPSBNYXRoLmV4cCh4IC8gdGhpcy5rMCk7XG4gICAgdmFyIGcgPSAwLjUgKiAoZiAtIDEgLyBmKTtcbiAgICB2YXIgdGVtcCA9IHRoaXMubGF0MCArIHkgLyB0aGlzLmswO1xuICAgIHZhciBoID0gTWF0aC5jb3ModGVtcCk7XG4gICAgY29uID0gTWF0aC5zcXJ0KCgxIC0gTWF0aC5wb3coaCwgMikpIC8gKDEgKyBNYXRoLnBvdyhnLCAyKSkpO1xuICAgIGxhdCA9IE1hdGguYXNpbihjb24pO1xuXG4gICAgaWYgKHkgPCAwKSB7XG4gICAgICBsYXQgPSAtbGF0O1xuICAgIH1cblxuICAgIGlmICgoZyA9PT0gMCkgJiYgKGggPT09IDApKSB7XG4gICAgICBsb24gPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24oTWF0aC5hdGFuMihnLCBoKSArIHRoaXMubG9uZzApO1xuICAgIH1cbiAgfVxuICBlbHNlIHsgLy8gZWxsaXBzb2lkYWwgZm9ybVxuICAgIGNvbiA9IHRoaXMubWwwICsgeSAvIHRoaXMuazA7XG4gICAgcGhpID0gcGpfaW52X21sZm4oY29uLCB0aGlzLmVzLCB0aGlzLmVuKTtcblxuICAgIGlmIChNYXRoLmFicyhwaGkpIDwgSEFMRl9QSSkge1xuICAgICAgdmFyIHNpbl9waGkgPSBNYXRoLnNpbihwaGkpO1xuICAgICAgdmFyIGNvc19waGkgPSBNYXRoLmNvcyhwaGkpO1xuICAgICAgdmFyIHRhbl9waGkgPSBNYXRoLmFicyhjb3NfcGhpKSA+IEVQU0xOID8gTWF0aC50YW4ocGhpKSA6IDA7XG4gICAgICB2YXIgYyA9IHRoaXMuZXAyICogTWF0aC5wb3coY29zX3BoaSwgMik7XG4gICAgICB2YXIgY3MgPSBNYXRoLnBvdyhjLCAyKTtcbiAgICAgIHZhciB0ID0gTWF0aC5wb3codGFuX3BoaSwgMik7XG4gICAgICB2YXIgdHMgPSBNYXRoLnBvdyh0LCAyKTtcbiAgICAgIGNvbiA9IDEgLSB0aGlzLmVzICogTWF0aC5wb3coc2luX3BoaSwgMik7XG4gICAgICB2YXIgZCA9IHggKiBNYXRoLnNxcnQoY29uKSAvIHRoaXMuazA7XG4gICAgICB2YXIgZHMgPSBNYXRoLnBvdyhkLCAyKTtcbiAgICAgIGNvbiA9IGNvbiAqIHRhbl9waGk7XG5cbiAgICAgIGxhdCA9IHBoaSAtIChjb24gKiBkcyAvICgxIC0gdGhpcy5lcykpICogMC41ICogKDEgLVxuICAgICAgICBkcyAvIDEyICogKDUgKyAzICogdCAtIDkgKiBjICogdCArIGMgLSA0ICogY3MgLVxuICAgICAgICBkcyAvIDMwICogKDYxICsgOTAgKiB0IC0gMjUyICogYyAqIHQgKyA0NSAqIHRzICsgNDYgKiBjIC1cbiAgICAgICAgZHMgLyA1NiAqICgxMzg1ICsgMzYzMyAqIHQgKyA0MDk1ICogdHMgKyAxNTc0ICogdHMgKiB0KSkpKTtcblxuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgKGQgKiAoMSAtXG4gICAgICAgIGRzIC8gNiAqICgxICsgMiAqIHQgKyBjIC1cbiAgICAgICAgZHMgLyAyMCAqICg1ICsgMjggKiB0ICsgMjQgKiB0cyArIDggKiBjICogdCArIDYgKiBjIC1cbiAgICAgICAgZHMgLyA0MiAqICg2MSArIDY2MiAqIHQgKyAxMzIwICogdHMgKyA3MjAgKiB0cyAqIHQpKSkpIC8gY29zX3BoaSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGxhdCA9IEhBTEZfUEkgKiBzaWduKHkpO1xuICAgICAgbG9uID0gMDtcbiAgICB9XG4gIH1cblxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcblxuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIlRyYW5zdmVyc2VfTWVyY2F0b3JcIiwgXCJUcmFuc3ZlcnNlIE1lcmNhdG9yXCIsIFwidG1lcmNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgdmFyIHIgPSBNYXRoLmV4cCh4KTtcbiAgciA9IChyIC0gMSAvIHIpIC8gMjtcbiAgcmV0dXJuIHI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgeSkge1xuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHkgPSBNYXRoLmFicyh5KTtcbiAgdmFyIGEgPSBNYXRoLm1heCh4LCB5KTtcbiAgdmFyIGIgPSBNYXRoLm1pbih4LCB5KSAvIChhID8gYSA6IDEpO1xuXG4gIHJldHVybiBhICogTWF0aC5zcXJ0KDEgKyBNYXRoLnBvdyhiLCAyKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwcCwgQikge1xuICB2YXIgY29zXzJCID0gMiAqIE1hdGguY29zKDIgKiBCKTtcbiAgdmFyIGkgPSBwcC5sZW5ndGggLSAxO1xuICB2YXIgaDEgPSBwcFtpXTtcbiAgdmFyIGgyID0gMDtcbiAgdmFyIGg7XG5cbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaCA9IC1oMiArIGNvc18yQiAqIGgxICsgcHBbaV07XG4gICAgaDIgPSBoMTtcbiAgICBoMSA9IGg7XG4gIH1cblxuICByZXR1cm4gKEIgKyBoICogTWF0aC5zaW4oMiAqIEIpKTtcbn1cbiIsImltcG9ydCBzaW5oIGZyb20gJy4vc2luaCc7XG5pbXBvcnQgY29zaCBmcm9tICcuL2Nvc2gnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwcCwgYXJnX3IsIGFyZ19pKSB7XG4gIHZhciBzaW5fYXJnX3IgPSBNYXRoLnNpbihhcmdfcik7XG4gIHZhciBjb3NfYXJnX3IgPSBNYXRoLmNvcyhhcmdfcik7XG4gIHZhciBzaW5oX2FyZ19pID0gc2luaChhcmdfaSk7XG4gIHZhciBjb3NoX2FyZ19pID0gY29zaChhcmdfaSk7XG4gIHZhciByID0gMiAqIGNvc19hcmdfciAqIGNvc2hfYXJnX2k7XG4gIHZhciBpID0gLTIgKiBzaW5fYXJnX3IgKiBzaW5oX2FyZ19pO1xuICB2YXIgaiA9IHBwLmxlbmd0aCAtIDE7XG4gIHZhciBociA9IHBwW2pdO1xuICB2YXIgaGkxID0gMDtcbiAgdmFyIGhyMSA9IDA7XG4gIHZhciBoaSA9IDA7XG4gIHZhciBocjI7XG4gIHZhciBoaTI7XG5cbiAgd2hpbGUgKC0taiA+PSAwKSB7XG4gICAgaHIyID0gaHIxO1xuICAgIGhpMiA9IGhpMTtcbiAgICBocjEgPSBocjtcbiAgICBoaTEgPSBoaTtcbiAgICBociA9IC1ocjIgKyByICogaHIxIC0gaSAqIGhpMSArIHBwW2pdO1xuICAgIGhpID0gLWhpMiArIGkgKiBocjEgKyByICogaGkxO1xuICB9XG5cbiAgciA9IHNpbl9hcmdfciAqIGNvc2hfYXJnX2k7XG4gIGkgPSBjb3NfYXJnX3IgKiBzaW5oX2FyZ19pO1xuXG4gIHJldHVybiBbciAqIGhyIC0gaSAqIGhpLCByICogaGkgKyBpICogaHJdO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICB2YXIgciA9IE1hdGguZXhwKHgpO1xuICByID0gKHIgKyAxIC8gcikgLyAyO1xuICByZXR1cm4gcjtcbn0iLCIvLyBIZWF2aWx5IGJhc2VkIG9uIHRoaXMgZXRtZXJjIHByb2plY3Rpb24gaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYmxvY2gvbWFwc2hhcGVyLXByb2ovYmxvYi9tYXN0ZXIvc3JjL3Byb2plY3Rpb25zL2V0bWVyYy5qc1xuXG5pbXBvcnQgc2luaCBmcm9tICcuLi9jb21tb24vc2luaCc7XG5pbXBvcnQgaHlwb3QgZnJvbSAnLi4vY29tbW9uL2h5cG90JztcbmltcG9ydCBhc2luaHkgZnJvbSAnLi4vY29tbW9uL2FzaW5oeSc7XG5pbXBvcnQgZ2F0ZyBmcm9tICcuLi9jb21tb24vZ2F0Zyc7XG5pbXBvcnQgY2xlbnMgZnJvbSAnLi4vY29tbW9uL2NsZW5zJztcbmltcG9ydCBjbGVuc19jbXBseCBmcm9tICcuLi9jb21tb24vY2xlbnNfY21wbHgnO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgaWYgKHRoaXMuZXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmVzIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luY29ycmVjdCBlbGxpcHRpY2FsIHVzYWdlJyk7XG4gIH1cblxuICB0aGlzLngwID0gdGhpcy54MCAhPT0gdW5kZWZpbmVkID8gdGhpcy54MCA6IDA7XG4gIHRoaXMueTAgPSB0aGlzLnkwICE9PSB1bmRlZmluZWQgPyB0aGlzLnkwIDogMDtcbiAgdGhpcy5sb25nMCA9IHRoaXMubG9uZzAgIT09IHVuZGVmaW5lZCA/IHRoaXMubG9uZzAgOiAwO1xuICB0aGlzLmxhdDAgPSB0aGlzLmxhdDAgIT09IHVuZGVmaW5lZCA/IHRoaXMubGF0MCA6IDA7XG5cbiAgdGhpcy5jZ2IgPSBbXTtcbiAgdGhpcy5jYmcgPSBbXTtcbiAgdGhpcy51dGcgPSBbXTtcbiAgdGhpcy5ndHUgPSBbXTtcblxuICB2YXIgZiA9IHRoaXMuZXMgLyAoMSArIE1hdGguc3FydCgxIC0gdGhpcy5lcykpO1xuICB2YXIgbiA9IGYgLyAoMiAtIGYpO1xuICB2YXIgbnAgPSBuO1xuXG4gIHRoaXMuY2diWzBdID0gbiAqICgyICsgbiAqICgtMiAvIDMgKyBuICogKC0yICsgbiAqICgxMTYgLyA0NSArIG4gKiAoMjYgLyA0NSArIG4gKiAoLTI4NTQgLyA2NzUgKSkpKSkpO1xuICB0aGlzLmNiZ1swXSA9IG4gKiAoLTIgKyBuICogKCAyIC8gMyArIG4gKiAoIDQgLyAzICsgbiAqICgtODIgLyA0NSArIG4gKiAoMzIgLyA0NSArIG4gKiAoNDY0MiAvIDQ3MjUpKSkpKSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMuY2diWzFdID0gbnAgKiAoNyAvIDMgKyBuICogKC04IC8gNSArIG4gKiAoLTIyNyAvIDQ1ICsgbiAqICgyNzA0IC8gMzE1ICsgbiAqICgyMzIzIC8gOTQ1KSkpKSk7XG4gIHRoaXMuY2JnWzFdID0gbnAgKiAoNSAvIDMgKyBuICogKC0xNiAvIDE1ICsgbiAqICggLTEzIC8gOSArIG4gKiAoOTA0IC8gMzE1ICsgbiAqICgtMTUyMiAvIDk0NSkpKSkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLmNnYlsyXSA9IG5wICogKDU2IC8gMTUgKyBuICogKC0xMzYgLyAzNSArIG4gKiAoLTEyNjIgLyAxMDUgKyBuICogKDczODE0IC8gMjgzNSkpKSk7XG4gIHRoaXMuY2JnWzJdID0gbnAgKiAoLTI2IC8gMTUgKyBuICogKDM0IC8gMjEgKyBuICogKDggLyA1ICsgbiAqICgtMTI2ODYgLyAyODM1KSkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy5jZ2JbM10gPSBucCAqICg0Mjc5IC8gNjMwICsgbiAqICgtMzMyIC8gMzUgKyBuICogKC0zOTk1NzIgLyAxNDE3NSkpKTtcbiAgdGhpcy5jYmdbM10gPSBucCAqICgxMjM3IC8gNjMwICsgbiAqICgtMTIgLyA1ICsgbiAqICggLTI0ODMyIC8gMTQxNzUpKSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMuY2diWzRdID0gbnAgKiAoNDE3NCAvIDMxNSArIG4gKiAoLTE0NDgzOCAvIDYyMzcpKTtcbiAgdGhpcy5jYmdbNF0gPSBucCAqICgtNzM0IC8gMzE1ICsgbiAqICgxMDk1OTggLyAzMTE4NSkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLmNnYls1XSA9IG5wICogKDYwMTY3NiAvIDIyMjc1KTtcbiAgdGhpcy5jYmdbNV0gPSBucCAqICg0NDQzMzcgLyAxNTU5MjUpO1xuXG4gIG5wID0gTWF0aC5wb3cobiwgMik7XG4gIHRoaXMuUW4gPSB0aGlzLmswIC8gKDEgKyBuKSAqICgxICsgbnAgKiAoMSAvIDQgKyBucCAqICgxIC8gNjQgKyBucCAvIDI1NikpKTtcblxuICB0aGlzLnV0Z1swXSA9IG4gKiAoLTAuNSArIG4gKiAoIDIgLyAzICsgbiAqICgtMzcgLyA5NiArIG4gKiAoIDEgLyAzNjAgKyBuICogKDgxIC8gNTEyICsgbiAqICgtOTYxOTkgLyA2MDQ4MDApKSkpKSk7XG4gIHRoaXMuZ3R1WzBdID0gbiAqICgwLjUgKyBuICogKC0yIC8gMyArIG4gKiAoNSAvIDE2ICsgbiAqICg0MSAvIDE4MCArIG4gKiAoLTEyNyAvIDI4OCArIG4gKiAoNzg5MSAvIDM3ODAwKSkpKSkpO1xuXG4gIHRoaXMudXRnWzFdID0gbnAgKiAoLTEgLyA0OCArIG4gKiAoLTEgLyAxNSArIG4gKiAoNDM3IC8gMTQ0MCArIG4gKiAoLTQ2IC8gMTA1ICsgbiAqICgxMTE4NzExIC8gMzg3MDcyMCkpKSkpO1xuICB0aGlzLmd0dVsxXSA9IG5wICogKDEzIC8gNDggKyBuICogKC0zIC8gNSArIG4gKiAoNTU3IC8gMTQ0MCArIG4gKiAoMjgxIC8gNjMwICsgbiAqICgtMTk4MzQzMyAvIDE5MzUzNjApKSkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy51dGdbMl0gPSBucCAqICgtMTcgLyA0ODAgKyBuICogKDM3IC8gODQwICsgbiAqICgyMDkgLyA0NDgwICsgbiAqICgtNTU2OSAvIDkwNzIwICkpKSk7XG4gIHRoaXMuZ3R1WzJdID0gbnAgKiAoNjEgLyAyNDAgKyBuICogKC0xMDMgLyAxNDAgKyBuICogKDE1MDYxIC8gMjY4ODAgKyBuICogKDE2NzYwMyAvIDE4MTQ0MCkpKSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMudXRnWzNdID0gbnAgKiAoLTQzOTcgLyAxNjEyODAgKyBuICogKDExIC8gNTA0ICsgbiAqICg4MzAyNTEgLyA3MjU3NjAwKSkpO1xuICB0aGlzLmd0dVszXSA9IG5wICogKDQ5NTYxIC8gMTYxMjgwICsgbiAqICgtMTc5IC8gMTY4ICsgbiAqICg2NjAxNjYxIC8gNzI1NzYwMCkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy51dGdbNF0gPSBucCAqICgtNDU4MyAvIDE2MTI4MCArIG4gKiAoMTA4ODQ3IC8gMzk5MTY4MCkpO1xuICB0aGlzLmd0dVs0XSA9IG5wICogKDM0NzI5IC8gODA2NDAgKyBuICogKC0zNDE4ODg5IC8gMTk5NTg0MCkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLnV0Z1s1XSA9IG5wICogKC0yMDY0ODY5MyAvIDYzODY2ODgwMCk7XG4gIHRoaXMuZ3R1WzVdID0gbnAgKiAoMjEyMzc4OTQxIC8gMzE5MzM0NDAwKTtcblxuICB2YXIgWiA9IGdhdGcodGhpcy5jYmcsIHRoaXMubGF0MCk7XG4gIHRoaXMuWmIgPSAtdGhpcy5RbiAqIChaICsgY2xlbnModGhpcy5ndHUsIDIgKiBaKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIENlID0gYWRqdXN0X2xvbihwLnggLSB0aGlzLmxvbmcwKTtcbiAgdmFyIENuID0gcC55O1xuXG4gIENuID0gZ2F0Zyh0aGlzLmNiZywgQ24pO1xuICB2YXIgc2luX0NuID0gTWF0aC5zaW4oQ24pO1xuICB2YXIgY29zX0NuID0gTWF0aC5jb3MoQ24pO1xuICB2YXIgc2luX0NlID0gTWF0aC5zaW4oQ2UpO1xuICB2YXIgY29zX0NlID0gTWF0aC5jb3MoQ2UpO1xuXG4gIENuID0gTWF0aC5hdGFuMihzaW5fQ24sIGNvc19DZSAqIGNvc19Dbik7XG4gIENlID0gTWF0aC5hdGFuMihzaW5fQ2UgKiBjb3NfQ24sIGh5cG90KHNpbl9DbiwgY29zX0NuICogY29zX0NlKSk7XG4gIENlID0gYXNpbmh5KE1hdGgudGFuKENlKSk7XG5cbiAgdmFyIHRtcCA9IGNsZW5zX2NtcGx4KHRoaXMuZ3R1LCAyICogQ24sIDIgKiBDZSk7XG5cbiAgQ24gPSBDbiArIHRtcFswXTtcbiAgQ2UgPSBDZSArIHRtcFsxXTtcblxuICB2YXIgeDtcbiAgdmFyIHk7XG5cbiAgaWYgKE1hdGguYWJzKENlKSA8PSAyLjYyMzM5NTE2Mjc3OCkge1xuICAgIHggPSB0aGlzLmEgKiAodGhpcy5RbiAqIENlKSArIHRoaXMueDA7XG4gICAgeSA9IHRoaXMuYSAqICh0aGlzLlFuICogQ24gKyB0aGlzLlpiKSArIHRoaXMueTA7XG4gIH1cbiAgZWxzZSB7XG4gICAgeCA9IEluZmluaXR5O1xuICAgIHkgPSBJbmZpbml0eTtcbiAgfVxuXG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG5cbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIENlID0gKHAueCAtIHRoaXMueDApICogKDEgLyB0aGlzLmEpO1xuICB2YXIgQ24gPSAocC55IC0gdGhpcy55MCkgKiAoMSAvIHRoaXMuYSk7XG5cbiAgQ24gPSAoQ24gLSB0aGlzLlpiKSAvIHRoaXMuUW47XG4gIENlID0gQ2UgLyB0aGlzLlFuO1xuXG4gIHZhciBsb247XG4gIHZhciBsYXQ7XG5cbiAgaWYgKE1hdGguYWJzKENlKSA8PSAyLjYyMzM5NTE2Mjc3OCkge1xuICAgIHZhciB0bXAgPSBjbGVuc19jbXBseCh0aGlzLnV0ZywgMiAqIENuLCAyICogQ2UpO1xuXG4gICAgQ24gPSBDbiArIHRtcFswXTtcbiAgICBDZSA9IENlICsgdG1wWzFdO1xuICAgIENlID0gTWF0aC5hdGFuKHNpbmgoQ2UpKTtcblxuICAgIHZhciBzaW5fQ24gPSBNYXRoLnNpbihDbik7XG4gICAgdmFyIGNvc19DbiA9IE1hdGguY29zKENuKTtcbiAgICB2YXIgc2luX0NlID0gTWF0aC5zaW4oQ2UpO1xuICAgIHZhciBjb3NfQ2UgPSBNYXRoLmNvcyhDZSk7XG5cbiAgICBDbiA9IE1hdGguYXRhbjIoc2luX0NuICogY29zX0NlLCBoeXBvdChzaW5fQ2UsIGNvc19DZSAqIGNvc19DbikpO1xuICAgIENlID0gTWF0aC5hdGFuMihzaW5fQ2UsIGNvc19DZSAqIGNvc19Dbik7XG5cbiAgICBsb24gPSBhZGp1c3RfbG9uKENlICsgdGhpcy5sb25nMCk7XG4gICAgbGF0ID0gZ2F0Zyh0aGlzLmNnYiwgQ24pO1xuICB9XG4gIGVsc2Uge1xuICAgIGxvbiA9IEluZmluaXR5O1xuICAgIGxhdCA9IEluZmluaXR5O1xuICB9XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG5cbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJFeHRlbmRlZF9UcmFuc3ZlcnNlX01lcmNhdG9yXCIsIFwiRXh0ZW5kZWQgVHJhbnN2ZXJzZSBNZXJjYXRvclwiLCBcImV0bWVyY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocHAsIGFyZ19yKSB7XG4gIHZhciByID0gMiAqIE1hdGguY29zKGFyZ19yKTtcbiAgdmFyIGkgPSBwcC5sZW5ndGggLSAxO1xuICB2YXIgaHIxID0gcHBbaV07XG4gIHZhciBocjIgPSAwO1xuICB2YXIgaHI7XG5cbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaHIgPSAtaHIyICsgciAqIGhyMSArIHBwW2ldO1xuICAgIGhyMiA9IGhyMTtcbiAgICBocjEgPSBocjtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnNpbihhcmdfcikgKiBocjtcbn1cbiIsImltcG9ydCBoeXBvdCBmcm9tICcuL2h5cG90JztcbmltcG9ydCBsb2cxcHkgZnJvbSAnLi9sb2cxcHknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHZhciB5ID0gTWF0aC5hYnMoeCk7XG4gIHkgPSBsb2cxcHkoeSAqICgxICsgeSAvIChoeXBvdCgxLCB5KSArIDEpKSk7XG5cbiAgcmV0dXJuIHggPCAwID8gLXkgOiB5O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICB2YXIgeSA9IDEgKyB4O1xuICB2YXIgeiA9IHkgLSAxO1xuXG4gIHJldHVybiB6ID09PSAwID8geCA6IHggKiBNYXRoLmxvZyh5KSAvIHo7XG59XG4iLCJpbXBvcnQgYWRqdXN0X3pvbmUgZnJvbSAnLi4vY29tbW9uL2FkanVzdF96b25lJztcbmltcG9ydCBldG1lcmMgZnJvbSAnLi9ldG1lcmMnO1xuZXhwb3J0IHZhciBkZXBlbmRzT24gPSAnZXRtZXJjJztcbmltcG9ydCB7RDJSfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIHpvbmUgPSBhZGp1c3Rfem9uZSh0aGlzLnpvbmUsIHRoaXMubG9uZzApO1xuICBpZiAoem9uZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHV0bSB6b25lJyk7XG4gIH1cbiAgdGhpcy5sYXQwID0gMDtcbiAgdGhpcy5sb25nMCA9ICAoKDYgKiBNYXRoLmFicyh6b25lKSkgLSAxODMpICogRDJSO1xuICB0aGlzLngwID0gNTAwMDAwO1xuICB0aGlzLnkwID0gdGhpcy51dG1Tb3V0aCA/IDEwMDAwMDAwIDogMDtcbiAgdGhpcy5rMCA9IDAuOTk5NjtcblxuICBldG1lcmMuaW5pdC5hcHBseSh0aGlzKTtcbiAgdGhpcy5mb3J3YXJkID0gZXRtZXJjLmZvcndhcmQ7XG4gIHRoaXMuaW52ZXJzZSA9IGV0bWVyYy5pbnZlcnNlO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiVW5pdmVyc2FsIFRyYW5zdmVyc2UgTWVyY2F0b3IgU3lzdGVtXCIsIFwidXRtXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBuYW1lczogbmFtZXMsXG4gIGRlcGVuZHNPbjogZGVwZW5kc09uXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi9hZGp1c3RfbG9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oem9uZSwgbG9uKSB7XG4gIGlmICh6b25lID09PSB1bmRlZmluZWQpIHtcbiAgICB6b25lID0gTWF0aC5mbG9vcigoYWRqdXN0X2xvbihsb24pICsgTWF0aC5QSSkgKiAzMCAvIE1hdGguUEkpICsgMTtcblxuICAgIGlmICh6b25lIDwgMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmICh6b25lID4gNjApIHtcbiAgICAgIHJldHVybiA2MDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHpvbmU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlc2lucCwgZXhwKSB7XG4gIHJldHVybiAoTWF0aC5wb3coKDEgLSBlc2lucCkgLyAoMSArIGVzaW5wKSwgZXhwKSk7XG59IiwiaW1wb3J0IHNyYXQgZnJvbSAnLi4vY29tbW9uL3NyYXQnO1xudmFyIE1BWF9JVEVSID0gMjA7XG5pbXBvcnQge0hBTEZfUEksIEZPUlRQSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB2YXIgc3BoaSA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHZhciBjcGhpID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbiAgY3BoaSAqPSBjcGhpO1xuICB0aGlzLnJjID0gTWF0aC5zcXJ0KDEgLSB0aGlzLmVzKSAvICgxIC0gdGhpcy5lcyAqIHNwaGkgKiBzcGhpKTtcbiAgdGhpcy5DID0gTWF0aC5zcXJ0KDEgKyB0aGlzLmVzICogY3BoaSAqIGNwaGkgLyAoMSAtIHRoaXMuZXMpKTtcbiAgdGhpcy5waGljMCA9IE1hdGguYXNpbihzcGhpIC8gdGhpcy5DKTtcbiAgdGhpcy5yYXRleHAgPSAwLjUgKiB0aGlzLkMgKiB0aGlzLmU7XG4gIHRoaXMuSyA9IE1hdGgudGFuKDAuNSAqIHRoaXMucGhpYzAgKyBGT1JUUEkpIC8gKE1hdGgucG93KE1hdGgudGFuKDAuNSAqIHRoaXMubGF0MCArIEZPUlRQSSksIHRoaXMuQykgKiBzcmF0KHRoaXMuZSAqIHNwaGksIHRoaXMucmF0ZXhwKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICBwLnkgPSAyICogTWF0aC5hdGFuKHRoaXMuSyAqIE1hdGgucG93KE1hdGgudGFuKDAuNSAqIGxhdCArIEZPUlRQSSksIHRoaXMuQykgKiBzcmF0KHRoaXMuZSAqIE1hdGguc2luKGxhdCksIHRoaXMucmF0ZXhwKSkgLSBIQUxGX1BJO1xuICBwLnggPSB0aGlzLkMgKiBsb247XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBERUxfVE9MID0gMWUtMTQ7XG4gIHZhciBsb24gPSBwLnggLyB0aGlzLkM7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciBudW0gPSBNYXRoLnBvdyhNYXRoLnRhbigwLjUgKiBsYXQgKyBGT1JUUEkpIC8gdGhpcy5LLCAxIC8gdGhpcy5DKTtcbiAgZm9yICh2YXIgaSA9IE1BWF9JVEVSOyBpID4gMDsgLS1pKSB7XG4gICAgbGF0ID0gMiAqIE1hdGguYXRhbihudW0gKiBzcmF0KHRoaXMuZSAqIE1hdGguc2luKHAueSksIC0gMC41ICogdGhpcy5lKSkgLSBIQUxGX1BJO1xuICAgIGlmIChNYXRoLmFicyhsYXQgLSBwLnkpIDwgREVMX1RPTCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHAueSA9IGxhdDtcbiAgfVxuICAvKiBjb252ZXJnZW5jZSBmYWlsZWQgKi9cbiAgaWYgKCFpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiZ2F1c3NcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBnYXVzcyBmcm9tICcuL2dhdXNzJztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIGdhdXNzLmluaXQuYXBwbHkodGhpcyk7XG4gIGlmICghdGhpcy5yYykge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnNpbmMwID0gTWF0aC5zaW4odGhpcy5waGljMCk7XG4gIHRoaXMuY29zYzAgPSBNYXRoLmNvcyh0aGlzLnBoaWMwKTtcbiAgdGhpcy5SMiA9IDIgKiB0aGlzLnJjO1xuICBpZiAoIXRoaXMudGl0bGUpIHtcbiAgICB0aGlzLnRpdGxlID0gXCJPYmxpcXVlIFN0ZXJlb2dyYXBoaWMgQWx0ZXJuYXRpdmVcIjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBzaW5jLCBjb3NjLCBjb3NsLCBrO1xuICBwLnggPSBhZGp1c3RfbG9uKHAueCAtIHRoaXMubG9uZzApO1xuICBnYXVzcy5mb3J3YXJkLmFwcGx5KHRoaXMsIFtwXSk7XG4gIHNpbmMgPSBNYXRoLnNpbihwLnkpO1xuICBjb3NjID0gTWF0aC5jb3MocC55KTtcbiAgY29zbCA9IE1hdGguY29zKHAueCk7XG4gIGsgPSB0aGlzLmswICogdGhpcy5SMiAvICgxICsgdGhpcy5zaW5jMCAqIHNpbmMgKyB0aGlzLmNvc2MwICogY29zYyAqIGNvc2wpO1xuICBwLnggPSBrICogY29zYyAqIE1hdGguc2luKHAueCk7XG4gIHAueSA9IGsgKiAodGhpcy5jb3NjMCAqIHNpbmMgLSB0aGlzLnNpbmMwICogY29zYyAqIGNvc2wpO1xuICBwLnggPSB0aGlzLmEgKiBwLnggKyB0aGlzLngwO1xuICBwLnkgPSB0aGlzLmEgKiBwLnkgKyB0aGlzLnkwO1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgc2luYywgY29zYywgbG9uLCBsYXQsIHJobztcbiAgcC54ID0gKHAueCAtIHRoaXMueDApIC8gdGhpcy5hO1xuICBwLnkgPSAocC55IC0gdGhpcy55MCkgLyB0aGlzLmE7XG5cbiAgcC54IC89IHRoaXMuazA7XG4gIHAueSAvPSB0aGlzLmswO1xuICBpZiAoKHJobyA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpKSkge1xuICAgIHZhciBjID0gMiAqIE1hdGguYXRhbjIocmhvLCB0aGlzLlIyKTtcbiAgICBzaW5jID0gTWF0aC5zaW4oYyk7XG4gICAgY29zYyA9IE1hdGguY29zKGMpO1xuICAgIGxhdCA9IE1hdGguYXNpbihjb3NjICogdGhpcy5zaW5jMCArIHAueSAqIHNpbmMgKiB0aGlzLmNvc2MwIC8gcmhvKTtcbiAgICBsb24gPSBNYXRoLmF0YW4yKHAueCAqIHNpbmMsIHJobyAqIHRoaXMuY29zYzAgKiBjb3NjIC0gcC55ICogdGhpcy5zaW5jMCAqIHNpbmMpO1xuICB9XG4gIGVsc2Uge1xuICAgIGxhdCA9IHRoaXMucGhpYzA7XG4gICAgbG9uID0gMDtcbiAgfVxuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICBnYXVzcy5pbnZlcnNlLmFwcGx5KHRoaXMsIFtwXSk7XG4gIHAueCA9IGFkanVzdF9sb24ocC54ICsgdGhpcy5sb25nMCk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiU3RlcmVvZ3JhcGhpY19Ob3J0aF9Qb2xlXCIsIFwiT2JsaXF1ZV9TdGVyZW9ncmFwaGljXCIsIFwiUG9sYXJfU3RlcmVvZ3JhcGhpY1wiLCBcInN0ZXJlYVwiLFwiT2JsaXF1ZSBTdGVyZW9ncmFwaGljIEFsdGVybmF0aXZlXCIsXCJEb3VibGVfU3RlcmVvZ3JhcGhpY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IHtFUFNMTiwgSEFMRl9QSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmltcG9ydCBzaWduIGZyb20gJy4uL2NvbW1vbi9zaWduJztcbmltcG9ydCBtc2ZueiBmcm9tICcuLi9jb21tb24vbXNmbnonO1xuaW1wb3J0IHRzZm56IGZyb20gJy4uL2NvbW1vbi90c2Zueic7XG5pbXBvcnQgcGhpMnogZnJvbSAnLi4vY29tbW9uL3BoaTJ6JztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNzZm5fKHBoaXQsIHNpbnBoaSwgZWNjZW4pIHtcbiAgc2lucGhpICo9IGVjY2VuO1xuICByZXR1cm4gKE1hdGgudGFuKDAuNSAqIChIQUxGX1BJICsgcGhpdCkpICogTWF0aC5wb3coKDEgLSBzaW5waGkpIC8gKDEgKyBzaW5waGkpLCAwLjUgKiBlY2NlbikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy5jb3NsYXQwID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbiAgdGhpcy5zaW5sYXQwID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgaWYgKHRoaXMuazAgPT09IDEgJiYgIWlzTmFOKHRoaXMubGF0X3RzKSAmJiBNYXRoLmFicyh0aGlzLmNvc2xhdDApIDw9IEVQU0xOKSB7XG4gICAgICB0aGlzLmswID0gMC41ICogKDEgKyBzaWduKHRoaXMubGF0MCkgKiBNYXRoLnNpbih0aGlzLmxhdF90cykpO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAoTWF0aC5hYnModGhpcy5jb3NsYXQwKSA8PSBFUFNMTikge1xuICAgICAgaWYgKHRoaXMubGF0MCA+IDApIHtcbiAgICAgICAgLy9Ob3J0aCBwb2xlXG4gICAgICAgIC8vdHJhY2UoJ3N0ZXJlOm5vcnRoIHBvbGUnKTtcbiAgICAgICAgdGhpcy5jb24gPSAxO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vU291dGggcG9sZVxuICAgICAgICAvL3RyYWNlKCdzdGVyZTpzb3V0aCBwb2xlJyk7XG4gICAgICAgIHRoaXMuY29uID0gLTE7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY29ucyA9IE1hdGguc3FydChNYXRoLnBvdygxICsgdGhpcy5lLCAxICsgdGhpcy5lKSAqIE1hdGgucG93KDEgLSB0aGlzLmUsIDEgLSB0aGlzLmUpKTtcbiAgICBpZiAodGhpcy5rMCA9PT0gMSAmJiAhaXNOYU4odGhpcy5sYXRfdHMpICYmIE1hdGguYWJzKHRoaXMuY29zbGF0MCkgPD0gRVBTTE4pIHtcbiAgICAgIHRoaXMuazAgPSAwLjUgKiB0aGlzLmNvbnMgKiBtc2Zueih0aGlzLmUsIE1hdGguc2luKHRoaXMubGF0X3RzKSwgTWF0aC5jb3ModGhpcy5sYXRfdHMpKSAvIHRzZm56KHRoaXMuZSwgdGhpcy5jb24gKiB0aGlzLmxhdF90cywgdGhpcy5jb24gKiBNYXRoLnNpbih0aGlzLmxhdF90cykpO1xuICAgIH1cbiAgICB0aGlzLm1zMSA9IG1zZm56KHRoaXMuZSwgdGhpcy5zaW5sYXQwLCB0aGlzLmNvc2xhdDApO1xuICAgIHRoaXMuWDAgPSAyICogTWF0aC5hdGFuKHRoaXMuc3Nmbl8odGhpcy5sYXQwLCB0aGlzLnNpbmxhdDAsIHRoaXMuZSkpIC0gSEFMRl9QSTtcbiAgICB0aGlzLmNvc1gwID0gTWF0aC5jb3ModGhpcy5YMCk7XG4gICAgdGhpcy5zaW5YMCA9IE1hdGguc2luKHRoaXMuWDApO1xuICB9XG59XG5cbi8vIFN0ZXJlb2dyYXBoaWMgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciBzaW5sYXQgPSBNYXRoLnNpbihsYXQpO1xuICB2YXIgY29zbGF0ID0gTWF0aC5jb3MobGF0KTtcbiAgdmFyIEEsIFgsIHNpblgsIGNvc1gsIHRzLCByaDtcbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuXG4gIGlmIChNYXRoLmFicyhNYXRoLmFicyhsb24gLSB0aGlzLmxvbmcwKSAtIE1hdGguUEkpIDw9IEVQU0xOICYmIE1hdGguYWJzKGxhdCArIHRoaXMubGF0MCkgPD0gRVBTTE4pIHtcbiAgICAvL2Nhc2Ugb2YgdGhlIG9yaWdpbmUgcG9pbnRcbiAgICAvL3RyYWNlKCdzdGVyZTp0aGlzIGlzIHRoZSBvcmlnaW4gcG9pbnQnKTtcbiAgICBwLnggPSBOYU47XG4gICAgcC55ID0gTmFOO1xuICAgIHJldHVybiBwO1xuICB9XG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIC8vdHJhY2UoJ3N0ZXJlOnNwaGVyZSBjYXNlJyk7XG4gICAgQSA9IDIgKiB0aGlzLmswIC8gKDEgKyB0aGlzLnNpbmxhdDAgKiBzaW5sYXQgKyB0aGlzLmNvc2xhdDAgKiBjb3NsYXQgKiBNYXRoLmNvcyhkbG9uKSk7XG4gICAgcC54ID0gdGhpcy5hICogQSAqIGNvc2xhdCAqIE1hdGguc2luKGRsb24pICsgdGhpcy54MDtcbiAgICBwLnkgPSB0aGlzLmEgKiBBICogKHRoaXMuY29zbGF0MCAqIHNpbmxhdCAtIHRoaXMuc2lubGF0MCAqIGNvc2xhdCAqIE1hdGguY29zKGRsb24pKSArIHRoaXMueTA7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgZWxzZSB7XG4gICAgWCA9IDIgKiBNYXRoLmF0YW4odGhpcy5zc2ZuXyhsYXQsIHNpbmxhdCwgdGhpcy5lKSkgLSBIQUxGX1BJO1xuICAgIGNvc1ggPSBNYXRoLmNvcyhYKTtcbiAgICBzaW5YID0gTWF0aC5zaW4oWCk7XG4gICAgaWYgKE1hdGguYWJzKHRoaXMuY29zbGF0MCkgPD0gRVBTTE4pIHtcbiAgICAgIHRzID0gdHNmbnoodGhpcy5lLCBsYXQgKiB0aGlzLmNvbiwgdGhpcy5jb24gKiBzaW5sYXQpO1xuICAgICAgcmggPSAyICogdGhpcy5hICogdGhpcy5rMCAqIHRzIC8gdGhpcy5jb25zO1xuICAgICAgcC54ID0gdGhpcy54MCArIHJoICogTWF0aC5zaW4obG9uIC0gdGhpcy5sb25nMCk7XG4gICAgICBwLnkgPSB0aGlzLnkwIC0gdGhpcy5jb24gKiByaCAqIE1hdGguY29zKGxvbiAtIHRoaXMubG9uZzApO1xuICAgICAgLy90cmFjZShwLnRvU3RyaW5nKCkpO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuc2lubGF0MCkgPCBFUFNMTikge1xuICAgICAgLy9FcVxuICAgICAgLy90cmFjZSgnc3RlcmU6ZXF1YXRldXInKTtcbiAgICAgIEEgPSAyICogdGhpcy5hICogdGhpcy5rMCAvICgxICsgY29zWCAqIE1hdGguY29zKGRsb24pKTtcbiAgICAgIHAueSA9IEEgKiBzaW5YO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vb3RoZXIgY2FzZVxuICAgICAgLy90cmFjZSgnc3RlcmU6bm9ybWFsIGNhc2UnKTtcbiAgICAgIEEgPSAyICogdGhpcy5hICogdGhpcy5rMCAqIHRoaXMubXMxIC8gKHRoaXMuY29zWDAgKiAoMSArIHRoaXMuc2luWDAgKiBzaW5YICsgdGhpcy5jb3NYMCAqIGNvc1ggKiBNYXRoLmNvcyhkbG9uKSkpO1xuICAgICAgcC55ID0gQSAqICh0aGlzLmNvc1gwICogc2luWCAtIHRoaXMuc2luWDAgKiBjb3NYICogTWF0aC5jb3MoZGxvbikpICsgdGhpcy55MDtcbiAgICB9XG4gICAgcC54ID0gQSAqIGNvc1ggKiBNYXRoLnNpbihkbG9uKSArIHRoaXMueDA7XG4gIH1cbiAgLy90cmFjZShwLnRvU3RyaW5nKCkpO1xuICByZXR1cm4gcDtcbn1cblxuLy8qIFN0ZXJlb2dyYXBoaWMgaW52ZXJzZSBlcXVhdGlvbnMtLW1hcHBpbmcgeCx5IHRvIGxhdC9sb25nXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgdmFyIGxvbiwgbGF0LCB0cywgY2UsIENoaTtcbiAgdmFyIHJoID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIHZhciBjID0gMiAqIE1hdGguYXRhbihyaCAvICgyICogdGhpcy5hICogdGhpcy5rMCkpO1xuICAgIGxvbiA9IHRoaXMubG9uZzA7XG4gICAgbGF0ID0gdGhpcy5sYXQwO1xuICAgIGlmIChyaCA8PSBFUFNMTikge1xuICAgICAgcC54ID0gbG9uO1xuICAgICAgcC55ID0gbGF0O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGxhdCA9IE1hdGguYXNpbihNYXRoLmNvcyhjKSAqIHRoaXMuc2lubGF0MCArIHAueSAqIE1hdGguc2luKGMpICogdGhpcy5jb3NsYXQwIC8gcmgpO1xuICAgIGlmIChNYXRoLmFicyh0aGlzLmNvc2xhdDApIDwgRVBTTE4pIHtcbiAgICAgIGlmICh0aGlzLmxhdDAgPiAwKSB7XG4gICAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54LCAtIDEgKiBwLnkpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKHAueCwgcC55KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLnggKiBNYXRoLnNpbihjKSwgcmggKiB0aGlzLmNvc2xhdDAgKiBNYXRoLmNvcyhjKSAtIHAueSAqIHRoaXMuc2lubGF0MCAqIE1hdGguc2luKGMpKSk7XG4gICAgfVxuICAgIHAueCA9IGxvbjtcbiAgICBwLnkgPSBsYXQ7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYgKE1hdGguYWJzKHRoaXMuY29zbGF0MCkgPD0gRVBTTE4pIHtcbiAgICAgIGlmIChyaCA8PSBFUFNMTikge1xuICAgICAgICBsYXQgPSB0aGlzLmxhdDA7XG4gICAgICAgIGxvbiA9IHRoaXMubG9uZzA7XG4gICAgICAgIHAueCA9IGxvbjtcbiAgICAgICAgcC55ID0gbGF0O1xuICAgICAgICAvL3RyYWNlKHAudG9TdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfVxuICAgICAgcC54ICo9IHRoaXMuY29uO1xuICAgICAgcC55ICo9IHRoaXMuY29uO1xuICAgICAgdHMgPSByaCAqIHRoaXMuY29ucyAvICgyICogdGhpcy5hICogdGhpcy5rMCk7XG4gICAgICBsYXQgPSB0aGlzLmNvbiAqIHBoaTJ6KHRoaXMuZSwgdHMpO1xuICAgICAgbG9uID0gdGhpcy5jb24gKiBhZGp1c3RfbG9uKHRoaXMuY29uICogdGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54LCAtIDEgKiBwLnkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjZSA9IDIgKiBNYXRoLmF0YW4ocmggKiB0aGlzLmNvc1gwIC8gKDIgKiB0aGlzLmEgKiB0aGlzLmswICogdGhpcy5tczEpKTtcbiAgICAgIGxvbiA9IHRoaXMubG9uZzA7XG4gICAgICBpZiAocmggPD0gRVBTTE4pIHtcbiAgICAgICAgQ2hpID0gdGhpcy5YMDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBDaGkgPSBNYXRoLmFzaW4oTWF0aC5jb3MoY2UpICogdGhpcy5zaW5YMCArIHAueSAqIE1hdGguc2luKGNlKSAqIHRoaXMuY29zWDAgLyByaCk7XG4gICAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54ICogTWF0aC5zaW4oY2UpLCByaCAqIHRoaXMuY29zWDAgKiBNYXRoLmNvcyhjZSkgLSBwLnkgKiB0aGlzLnNpblgwICogTWF0aC5zaW4oY2UpKSk7XG4gICAgICB9XG4gICAgICBsYXQgPSAtMSAqIHBoaTJ6KHRoaXMuZSwgTWF0aC50YW4oMC41ICogKEhBTEZfUEkgKyBDaGkpKSk7XG4gICAgfVxuICB9XG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuXG4gIC8vdHJhY2UocC50b1N0cmluZygpKTtcbiAgcmV0dXJuIHA7XG5cbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcInN0ZXJlXCIsIFwiU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlXCIsIFwiUG9sYXIgU3RlcmVvZ3JhcGhpYyAodmFyaWFudCBCKVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzLFxuICBzc2ZuXzogc3Nmbl9cbn07XG4iLCIvKlxuICByZWZlcmVuY2VzOlxuICAgIEZvcm11bGVzIGV0IGNvbnN0YW50ZXMgcG91ciBsZSBDYWxjdWwgcG91ciBsYVxuICAgIHByb2plY3Rpb24gY3lsaW5kcmlxdWUgY29uZm9ybWUgw6AgYXhlIG9ibGlxdWUgZXQgcG91ciBsYSB0cmFuc2Zvcm1hdGlvbiBlbnRyZVxuICAgIGRlcyBzeXN0w6htZXMgZGUgcsOpZsOpcmVuY2UuXG4gICAgaHR0cDovL3d3dy5zd2lzc3RvcG8uYWRtaW4uY2gvaW50ZXJuZXQvc3dpc3N0b3BvL2ZyL2hvbWUvdG9waWNzL3N1cnZleS9zeXMvcmVmc3lzL3N3aXR6ZXJsYW5kLnBhcnN5c3JlbGF0ZWQxLjMxMjE2LmRvd25sb2FkTGlzdC43NzAwNC5Eb3dubG9hZEZpbGUudG1wL3N3aXNzcHJvamVjdGlvbmZyLnBkZlxuICAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIHBoeTAgPSB0aGlzLmxhdDA7XG4gIHRoaXMubGFtYmRhMCA9IHRoaXMubG9uZzA7XG4gIHZhciBzaW5QaHkwID0gTWF0aC5zaW4ocGh5MCk7XG4gIHZhciBzZW1pTWFqb3JBeGlzID0gdGhpcy5hO1xuICB2YXIgaW52RiA9IHRoaXMucmY7XG4gIHZhciBmbGF0dGVuaW5nID0gMSAvIGludkY7XG4gIHZhciBlMiA9IDIgKiBmbGF0dGVuaW5nIC0gTWF0aC5wb3coZmxhdHRlbmluZywgMik7XG4gIHZhciBlID0gdGhpcy5lID0gTWF0aC5zcXJ0KGUyKTtcbiAgdGhpcy5SID0gdGhpcy5rMCAqIHNlbWlNYWpvckF4aXMgKiBNYXRoLnNxcnQoMSAtIGUyKSAvICgxIC0gZTIgKiBNYXRoLnBvdyhzaW5QaHkwLCAyKSk7XG4gIHRoaXMuYWxwaGEgPSBNYXRoLnNxcnQoMSArIGUyIC8gKDEgLSBlMikgKiBNYXRoLnBvdyhNYXRoLmNvcyhwaHkwKSwgNCkpO1xuICB0aGlzLmIwID0gTWF0aC5hc2luKHNpblBoeTAgLyB0aGlzLmFscGhhKTtcbiAgdmFyIGsxID0gTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSSAvIDQgKyB0aGlzLmIwIC8gMikpO1xuICB2YXIgazIgPSBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIHBoeTAgLyAyKSk7XG4gIHZhciBrMyA9IE1hdGgubG9nKCgxICsgZSAqIHNpblBoeTApIC8gKDEgLSBlICogc2luUGh5MCkpO1xuICB0aGlzLksgPSBrMSAtIHRoaXMuYWxwaGEgKiBrMiArIHRoaXMuYWxwaGEgKiBlIC8gMiAqIGszO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBTYTEgPSBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCAtIHAueSAvIDIpKTtcbiAgdmFyIFNhMiA9IHRoaXMuZSAvIDIgKiBNYXRoLmxvZygoMSArIHRoaXMuZSAqIE1hdGguc2luKHAueSkpIC8gKDEgLSB0aGlzLmUgKiBNYXRoLnNpbihwLnkpKSk7XG4gIHZhciBTID0gLXRoaXMuYWxwaGEgKiAoU2ExICsgU2EyKSArIHRoaXMuSztcblxuICAvLyBzcGhlcmljIGxhdGl0dWRlXG4gIHZhciBiID0gMiAqIChNYXRoLmF0YW4oTWF0aC5leHAoUykpIC0gTWF0aC5QSSAvIDQpO1xuXG4gIC8vIHNwaGVyaWMgbG9uZ2l0dWRlXG4gIHZhciBJID0gdGhpcy5hbHBoYSAqIChwLnggLSB0aGlzLmxhbWJkYTApO1xuXG4gIC8vIHBzb2V1ZG8gZXF1YXRvcmlhbCByb3RhdGlvblxuICB2YXIgcm90SSA9IE1hdGguYXRhbihNYXRoLnNpbihJKSAvIChNYXRoLnNpbih0aGlzLmIwKSAqIE1hdGgudGFuKGIpICsgTWF0aC5jb3ModGhpcy5iMCkgKiBNYXRoLmNvcyhJKSkpO1xuXG4gIHZhciByb3RCID0gTWF0aC5hc2luKE1hdGguY29zKHRoaXMuYjApICogTWF0aC5zaW4oYikgLSBNYXRoLnNpbih0aGlzLmIwKSAqIE1hdGguY29zKGIpICogTWF0aC5jb3MoSSkpO1xuXG4gIHAueSA9IHRoaXMuUiAvIDIgKiBNYXRoLmxvZygoMSArIE1hdGguc2luKHJvdEIpKSAvICgxIC0gTWF0aC5zaW4ocm90QikpKSArIHRoaXMueTA7XG4gIHAueCA9IHRoaXMuUiAqIHJvdEkgKyB0aGlzLngwO1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgWSA9IHAueCAtIHRoaXMueDA7XG4gIHZhciBYID0gcC55IC0gdGhpcy55MDtcblxuICB2YXIgcm90SSA9IFkgLyB0aGlzLlI7XG4gIHZhciByb3RCID0gMiAqIChNYXRoLmF0YW4oTWF0aC5leHAoWCAvIHRoaXMuUikpIC0gTWF0aC5QSSAvIDQpO1xuXG4gIHZhciBiID0gTWF0aC5hc2luKE1hdGguY29zKHRoaXMuYjApICogTWF0aC5zaW4ocm90QikgKyBNYXRoLnNpbih0aGlzLmIwKSAqIE1hdGguY29zKHJvdEIpICogTWF0aC5jb3Mocm90SSkpO1xuICB2YXIgSSA9IE1hdGguYXRhbihNYXRoLnNpbihyb3RJKSAvIChNYXRoLmNvcyh0aGlzLmIwKSAqIE1hdGguY29zKHJvdEkpIC0gTWF0aC5zaW4odGhpcy5iMCkgKiBNYXRoLnRhbihyb3RCKSkpO1xuXG4gIHZhciBsYW1iZGEgPSB0aGlzLmxhbWJkYTAgKyBJIC8gdGhpcy5hbHBoYTtcblxuICB2YXIgUyA9IDA7XG4gIHZhciBwaHkgPSBiO1xuICB2YXIgcHJldlBoeSA9IC0xMDAwO1xuICB2YXIgaXRlcmF0aW9uID0gMDtcbiAgd2hpbGUgKE1hdGguYWJzKHBoeSAtIHByZXZQaHkpID4gMC4wMDAwMDAxKSB7XG4gICAgaWYgKCsraXRlcmF0aW9uID4gMjApIHtcbiAgICAgIC8vLi4ucmVwb3J0RXJyb3IoXCJvbWVyY0Z3ZEluZmluaXR5XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvL1MgPSBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIHBoeSAvIDIpKTtcbiAgICBTID0gMSAvIHRoaXMuYWxwaGEgKiAoTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSSAvIDQgKyBiIC8gMikpIC0gdGhpcy5LKSArIHRoaXMuZSAqIE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0ICsgTWF0aC5hc2luKHRoaXMuZSAqIE1hdGguc2luKHBoeSkpIC8gMikpO1xuICAgIHByZXZQaHkgPSBwaHk7XG4gICAgcGh5ID0gMiAqIE1hdGguYXRhbihNYXRoLmV4cChTKSkgLSBNYXRoLlBJIC8gMjtcbiAgfVxuXG4gIHAueCA9IGxhbWJkYTtcbiAgcC55ID0gcGh5O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcInNvbWVyY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IHRzZm56IGZyb20gJy4uL2NvbW1vbi90c2Zueic7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgcGhpMnogZnJvbSAnLi4vY29tbW9uL3BoaTJ6JztcbmltcG9ydCB7RVBTTE4sIEhBTEZfUEksIEZPUlRQSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbi8qIEluaXRpYWxpemUgdGhlIE9ibGlxdWUgTWVyY2F0b3IgIHByb2plY3Rpb25cbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHRoaXMubm9fb2ZmID0gdGhpcy5ub19vZmYgfHwgZmFsc2U7XG4gIHRoaXMubm9fcm90ID0gdGhpcy5ub19yb3QgfHwgZmFsc2U7XG5cbiAgaWYgKGlzTmFOKHRoaXMuazApKSB7XG4gICAgdGhpcy5rMCA9IDE7XG4gIH1cbiAgdmFyIHNpbmxhdCA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHZhciBjb3NsYXQgPSBNYXRoLmNvcyh0aGlzLmxhdDApO1xuICB2YXIgY29uID0gdGhpcy5lICogc2lubGF0O1xuXG4gIHRoaXMuYmwgPSBNYXRoLnNxcnQoMSArIHRoaXMuZXMgLyAoMSAtIHRoaXMuZXMpICogTWF0aC5wb3coY29zbGF0LCA0KSk7XG4gIHRoaXMuYWwgPSB0aGlzLmEgKiB0aGlzLmJsICogdGhpcy5rMCAqIE1hdGguc3FydCgxIC0gdGhpcy5lcykgLyAoMSAtIGNvbiAqIGNvbik7XG4gIHZhciB0MCA9IHRzZm56KHRoaXMuZSwgdGhpcy5sYXQwLCBzaW5sYXQpO1xuICB2YXIgZGwgPSB0aGlzLmJsIC8gY29zbGF0ICogTWF0aC5zcXJ0KCgxIC0gdGhpcy5lcykgLyAoMSAtIGNvbiAqIGNvbikpO1xuICBpZiAoZGwgKiBkbCA8IDEpIHtcbiAgICBkbCA9IDE7XG4gIH1cbiAgdmFyIGZsO1xuICB2YXIgZ2w7XG4gIGlmICghaXNOYU4odGhpcy5sb25nYykpIHtcbiAgICAvL0NlbnRyYWwgcG9pbnQgYW5kIGF6aW11dGggbWV0aG9kXG5cbiAgICBpZiAodGhpcy5sYXQwID49IDApIHtcbiAgICAgIGZsID0gZGwgKyBNYXRoLnNxcnQoZGwgKiBkbCAtIDEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZsID0gZGwgLSBNYXRoLnNxcnQoZGwgKiBkbCAtIDEpO1xuICAgIH1cbiAgICB0aGlzLmVsID0gZmwgKiBNYXRoLnBvdyh0MCwgdGhpcy5ibCk7XG4gICAgZ2wgPSAwLjUgKiAoZmwgLSAxIC8gZmwpO1xuICAgIHRoaXMuZ2FtbWEwID0gTWF0aC5hc2luKE1hdGguc2luKHRoaXMuYWxwaGEpIC8gZGwpO1xuICAgIHRoaXMubG9uZzAgPSB0aGlzLmxvbmdjIC0gTWF0aC5hc2luKGdsICogTWF0aC50YW4odGhpcy5nYW1tYTApKSAvIHRoaXMuYmw7XG5cbiAgfVxuICBlbHNlIHtcbiAgICAvLzIgcG9pbnRzIG1ldGhvZFxuICAgIHZhciB0MSA9IHRzZm56KHRoaXMuZSwgdGhpcy5sYXQxLCBNYXRoLnNpbih0aGlzLmxhdDEpKTtcbiAgICB2YXIgdDIgPSB0c2Zueih0aGlzLmUsIHRoaXMubGF0MiwgTWF0aC5zaW4odGhpcy5sYXQyKSk7XG4gICAgaWYgKHRoaXMubGF0MCA+PSAwKSB7XG4gICAgICB0aGlzLmVsID0gKGRsICsgTWF0aC5zcXJ0KGRsICogZGwgLSAxKSkgKiBNYXRoLnBvdyh0MCwgdGhpcy5ibCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5lbCA9IChkbCAtIE1hdGguc3FydChkbCAqIGRsIC0gMSkpICogTWF0aC5wb3codDAsIHRoaXMuYmwpO1xuICAgIH1cbiAgICB2YXIgaGwgPSBNYXRoLnBvdyh0MSwgdGhpcy5ibCk7XG4gICAgdmFyIGxsID0gTWF0aC5wb3codDIsIHRoaXMuYmwpO1xuICAgIGZsID0gdGhpcy5lbCAvIGhsO1xuICAgIGdsID0gMC41ICogKGZsIC0gMSAvIGZsKTtcbiAgICB2YXIgamwgPSAodGhpcy5lbCAqIHRoaXMuZWwgLSBsbCAqIGhsKSAvICh0aGlzLmVsICogdGhpcy5lbCArIGxsICogaGwpO1xuICAgIHZhciBwbCA9IChsbCAtIGhsKSAvIChsbCArIGhsKTtcbiAgICB2YXIgZGxvbjEyID0gYWRqdXN0X2xvbih0aGlzLmxvbmcxIC0gdGhpcy5sb25nMik7XG4gICAgdGhpcy5sb25nMCA9IDAuNSAqICh0aGlzLmxvbmcxICsgdGhpcy5sb25nMikgLSBNYXRoLmF0YW4oamwgKiBNYXRoLnRhbigwLjUgKiB0aGlzLmJsICogKGRsb24xMikpIC8gcGwpIC8gdGhpcy5ibDtcbiAgICB0aGlzLmxvbmcwID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwKTtcbiAgICB2YXIgZGxvbjEwID0gYWRqdXN0X2xvbih0aGlzLmxvbmcxIC0gdGhpcy5sb25nMCk7XG4gICAgdGhpcy5nYW1tYTAgPSBNYXRoLmF0YW4oTWF0aC5zaW4odGhpcy5ibCAqIChkbG9uMTApKSAvIGdsKTtcbiAgICB0aGlzLmFscGhhID0gTWF0aC5hc2luKGRsICogTWF0aC5zaW4odGhpcy5nYW1tYTApKTtcbiAgfVxuXG4gIGlmICh0aGlzLm5vX29mZikge1xuICAgIHRoaXMudWMgPSAwO1xuICB9XG4gIGVsc2Uge1xuICAgIGlmICh0aGlzLmxhdDAgPj0gMCkge1xuICAgICAgdGhpcy51YyA9IHRoaXMuYWwgLyB0aGlzLmJsICogTWF0aC5hdGFuMihNYXRoLnNxcnQoZGwgKiBkbCAtIDEpLCBNYXRoLmNvcyh0aGlzLmFscGhhKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy51YyA9IC0xICogdGhpcy5hbCAvIHRoaXMuYmwgKiBNYXRoLmF0YW4yKE1hdGguc3FydChkbCAqIGRsIC0gMSksIE1hdGguY29zKHRoaXMuYWxwaGEpKTtcbiAgICB9XG4gIH1cblxufVxuXG4vKiBPYmxpcXVlIE1lcmNhdG9yIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciB1cywgdnM7XG4gIHZhciBjb247XG4gIGlmIChNYXRoLmFicyhNYXRoLmFicyhsYXQpIC0gSEFMRl9QSSkgPD0gRVBTTE4pIHtcbiAgICBpZiAobGF0ID4gMCkge1xuICAgICAgY29uID0gLTE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uID0gMTtcbiAgICB9XG4gICAgdnMgPSB0aGlzLmFsIC8gdGhpcy5ibCAqIE1hdGgubG9nKE1hdGgudGFuKEZPUlRQSSArIGNvbiAqIHRoaXMuZ2FtbWEwICogMC41KSk7XG4gICAgdXMgPSAtMSAqIGNvbiAqIEhBTEZfUEkgKiB0aGlzLmFsIC8gdGhpcy5ibDtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgdCA9IHRzZm56KHRoaXMuZSwgbGF0LCBNYXRoLnNpbihsYXQpKTtcbiAgICB2YXIgcWwgPSB0aGlzLmVsIC8gTWF0aC5wb3codCwgdGhpcy5ibCk7XG4gICAgdmFyIHNsID0gMC41ICogKHFsIC0gMSAvIHFsKTtcbiAgICB2YXIgdGwgPSAwLjUgKiAocWwgKyAxIC8gcWwpO1xuICAgIHZhciB2bCA9IE1hdGguc2luKHRoaXMuYmwgKiAoZGxvbikpO1xuICAgIHZhciB1bCA9IChzbCAqIE1hdGguc2luKHRoaXMuZ2FtbWEwKSAtIHZsICogTWF0aC5jb3ModGhpcy5nYW1tYTApKSAvIHRsO1xuICAgIGlmIChNYXRoLmFicyhNYXRoLmFicyh1bCkgLSAxKSA8PSBFUFNMTikge1xuICAgICAgdnMgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdnMgPSAwLjUgKiB0aGlzLmFsICogTWF0aC5sb2coKDEgLSB1bCkgLyAoMSArIHVsKSkgLyB0aGlzLmJsO1xuICAgIH1cbiAgICBpZiAoTWF0aC5hYnMoTWF0aC5jb3ModGhpcy5ibCAqIChkbG9uKSkpIDw9IEVQU0xOKSB7XG4gICAgICB1cyA9IHRoaXMuYWwgKiB0aGlzLmJsICogKGRsb24pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHVzID0gdGhpcy5hbCAqIE1hdGguYXRhbjIoc2wgKiBNYXRoLmNvcyh0aGlzLmdhbW1hMCkgKyB2bCAqIE1hdGguc2luKHRoaXMuZ2FtbWEwKSwgTWF0aC5jb3ModGhpcy5ibCAqIGRsb24pKSAvIHRoaXMuYmw7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMubm9fcm90KSB7XG4gICAgcC54ID0gdGhpcy54MCArIHVzO1xuICAgIHAueSA9IHRoaXMueTAgKyB2cztcbiAgfVxuICBlbHNlIHtcblxuICAgIHVzIC09IHRoaXMudWM7XG4gICAgcC54ID0gdGhpcy54MCArIHZzICogTWF0aC5jb3ModGhpcy5hbHBoYSkgKyB1cyAqIE1hdGguc2luKHRoaXMuYWxwaGEpO1xuICAgIHAueSA9IHRoaXMueTAgKyB1cyAqIE1hdGguY29zKHRoaXMuYWxwaGEpIC0gdnMgKiBNYXRoLnNpbih0aGlzLmFscGhhKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgdXMsIHZzO1xuICBpZiAodGhpcy5ub19yb3QpIHtcbiAgICB2cyA9IHAueSAtIHRoaXMueTA7XG4gICAgdXMgPSBwLnggLSB0aGlzLngwO1xuICB9XG4gIGVsc2Uge1xuICAgIHZzID0gKHAueCAtIHRoaXMueDApICogTWF0aC5jb3ModGhpcy5hbHBoYSkgLSAocC55IC0gdGhpcy55MCkgKiBNYXRoLnNpbih0aGlzLmFscGhhKTtcbiAgICB1cyA9IChwLnkgLSB0aGlzLnkwKSAqIE1hdGguY29zKHRoaXMuYWxwaGEpICsgKHAueCAtIHRoaXMueDApICogTWF0aC5zaW4odGhpcy5hbHBoYSk7XG4gICAgdXMgKz0gdGhpcy51YztcbiAgfVxuICB2YXIgcXAgPSBNYXRoLmV4cCgtMSAqIHRoaXMuYmwgKiB2cyAvIHRoaXMuYWwpO1xuICB2YXIgc3AgPSAwLjUgKiAocXAgLSAxIC8gcXApO1xuICB2YXIgdHAgPSAwLjUgKiAocXAgKyAxIC8gcXApO1xuICB2YXIgdnAgPSBNYXRoLnNpbih0aGlzLmJsICogdXMgLyB0aGlzLmFsKTtcbiAgdmFyIHVwID0gKHZwICogTWF0aC5jb3ModGhpcy5nYW1tYTApICsgc3AgKiBNYXRoLnNpbih0aGlzLmdhbW1hMCkpIC8gdHA7XG4gIHZhciB0cyA9IE1hdGgucG93KHRoaXMuZWwgLyBNYXRoLnNxcnQoKDEgKyB1cCkgLyAoMSAtIHVwKSksIDEgLyB0aGlzLmJsKTtcbiAgaWYgKE1hdGguYWJzKHVwIC0gMSkgPCBFUFNMTikge1xuICAgIHAueCA9IHRoaXMubG9uZzA7XG4gICAgcC55ID0gSEFMRl9QSTtcbiAgfVxuICBlbHNlIGlmIChNYXRoLmFicyh1cCArIDEpIDwgRVBTTE4pIHtcbiAgICBwLnggPSB0aGlzLmxvbmcwO1xuICAgIHAueSA9IC0xICogSEFMRl9QSTtcbiAgfVxuICBlbHNlIHtcbiAgICBwLnkgPSBwaGkyeih0aGlzLmUsIHRzKTtcbiAgICBwLnggPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgLSBNYXRoLmF0YW4yKHNwICogTWF0aC5jb3ModGhpcy5nYW1tYTApIC0gdnAgKiBNYXRoLnNpbih0aGlzLmdhbW1hMCksIE1hdGguY29zKHRoaXMuYmwgKiB1cyAvIHRoaXMuYWwpKSAvIHRoaXMuYmwpO1xuICB9XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiSG90aW5lX09ibGlxdWVfTWVyY2F0b3JcIiwgXCJIb3RpbmUgT2JsaXF1ZSBNZXJjYXRvclwiLCBcIkhvdGluZV9PYmxpcXVlX01lcmNhdG9yX0F6aW11dGhfTmF0dXJhbF9PcmlnaW5cIiwgXCJIb3RpbmVfT2JsaXF1ZV9NZXJjYXRvcl9BemltdXRoX0NlbnRlclwiLCBcIm9tZXJjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgbXNmbnogZnJvbSAnLi4vY29tbW9uL21zZm56JztcbmltcG9ydCB0c2ZueiBmcm9tICcuLi9jb21tb24vdHNmbnonO1xuaW1wb3J0IHNpZ24gZnJvbSAnLi4vY29tbW9uL3NpZ24nO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IHBoaTJ6IGZyb20gJy4uL2NvbW1vbi9waGkyeic7XG5pbXBvcnQge0hBTEZfUEksIEVQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuXG4gIC8vIGFycmF5IG9mOiAgcl9tYWoscl9taW4sbGF0MSxsYXQyLGNfbG9uLGNfbGF0LGZhbHNlX2Vhc3QsZmFsc2Vfbm9ydGhcbiAgLy9kb3VibGUgY19sYXQ7ICAgICAgICAgICAgICAgICAgIC8qIGNlbnRlciBsYXRpdHVkZSAgICAgICAgICAgICAgICAgICAgICAqL1xuICAvL2RvdWJsZSBjX2xvbjsgICAgICAgICAgICAgICAgICAgLyogY2VudGVyIGxvbmdpdHVkZSAgICAgICAgICAgICAgICAgICAgICovXG4gIC8vZG91YmxlIGxhdDE7ICAgICAgICAgICAgICAgICAgICAvKiBmaXJzdCBzdGFuZGFyZCBwYXJhbGxlbCAgICAgICAgICAgICAgKi9cbiAgLy9kb3VibGUgbGF0MjsgICAgICAgICAgICAgICAgICAgIC8qIHNlY29uZCBzdGFuZGFyZCBwYXJhbGxlbCAgICAgICAgICAgICAqL1xuICAvL2RvdWJsZSByX21hajsgICAgICAgICAgICAgICAgICAgLyogbWFqb3IgYXhpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gIC8vZG91YmxlIHJfbWluOyAgICAgICAgICAgICAgICAgICAvKiBtaW5vciBheGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgLy9kb3VibGUgZmFsc2VfZWFzdDsgICAgICAgICAgICAgIC8qIHggb2Zmc2V0IGluIG1ldGVycyAgICAgICAgICAgICAgICAgICAqL1xuICAvL2RvdWJsZSBmYWxzZV9ub3J0aDsgICAgICAgICAgICAgLyogeSBvZmZzZXQgaW4gbWV0ZXJzICAgICAgICAgICAgICAgICAgICovXG5cbiAgaWYgKCF0aGlzLmxhdDIpIHtcbiAgICB0aGlzLmxhdDIgPSB0aGlzLmxhdDE7XG4gIH0gLy9pZiBsYXQyIGlzIG5vdCBkZWZpbmVkXG4gIGlmICghdGhpcy5rMCkge1xuICAgIHRoaXMuazAgPSAxO1xuICB9XG4gIHRoaXMueDAgPSB0aGlzLngwIHx8IDA7XG4gIHRoaXMueTAgPSB0aGlzLnkwIHx8IDA7XG4gIC8vIFN0YW5kYXJkIFBhcmFsbGVscyBjYW5ub3QgYmUgZXF1YWwgYW5kIG9uIG9wcG9zaXRlIHNpZGVzIG9mIHRoZSBlcXVhdG9yXG4gIGlmIChNYXRoLmFicyh0aGlzLmxhdDEgKyB0aGlzLmxhdDIpIDwgRVBTTE4pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdGVtcCA9IHRoaXMuYiAvIHRoaXMuYTtcbiAgdGhpcy5lID0gTWF0aC5zcXJ0KDEgLSB0ZW1wICogdGVtcCk7XG5cbiAgdmFyIHNpbjEgPSBNYXRoLnNpbih0aGlzLmxhdDEpO1xuICB2YXIgY29zMSA9IE1hdGguY29zKHRoaXMubGF0MSk7XG4gIHZhciBtczEgPSBtc2Zueih0aGlzLmUsIHNpbjEsIGNvczEpO1xuICB2YXIgdHMxID0gdHNmbnoodGhpcy5lLCB0aGlzLmxhdDEsIHNpbjEpO1xuXG4gIHZhciBzaW4yID0gTWF0aC5zaW4odGhpcy5sYXQyKTtcbiAgdmFyIGNvczIgPSBNYXRoLmNvcyh0aGlzLmxhdDIpO1xuICB2YXIgbXMyID0gbXNmbnoodGhpcy5lLCBzaW4yLCBjb3MyKTtcbiAgdmFyIHRzMiA9IHRzZm56KHRoaXMuZSwgdGhpcy5sYXQyLCBzaW4yKTtcblxuICB2YXIgdHMwID0gdHNmbnoodGhpcy5lLCB0aGlzLmxhdDAsIE1hdGguc2luKHRoaXMubGF0MCkpO1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxhdDEgLSB0aGlzLmxhdDIpID4gRVBTTE4pIHtcbiAgICB0aGlzLm5zID0gTWF0aC5sb2cobXMxIC8gbXMyKSAvIE1hdGgubG9nKHRzMSAvIHRzMik7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5ucyA9IHNpbjE7XG4gIH1cbiAgaWYgKGlzTmFOKHRoaXMubnMpKSB7XG4gICAgdGhpcy5ucyA9IHNpbjE7XG4gIH1cbiAgdGhpcy5mMCA9IG1zMSAvICh0aGlzLm5zICogTWF0aC5wb3codHMxLCB0aGlzLm5zKSk7XG4gIHRoaXMucmggPSB0aGlzLmEgKiB0aGlzLmYwICogTWF0aC5wb3codHMwLCB0aGlzLm5zKTtcbiAgaWYgKCF0aGlzLnRpdGxlKSB7XG4gICAgdGhpcy50aXRsZSA9IFwiTGFtYmVydCBDb25mb3JtYWwgQ29uaWNcIjtcbiAgfVxufVxuXG4vLyBMYW1iZXJ0IENvbmZvcm1hbCBjb25pYyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICAvLyBzaW5ndWxhciBjYXNlcyA6XG4gIGlmIChNYXRoLmFicygyICogTWF0aC5hYnMobGF0KSAtIE1hdGguUEkpIDw9IEVQU0xOKSB7XG4gICAgbGF0ID0gc2lnbihsYXQpICogKEhBTEZfUEkgLSAyICogRVBTTE4pO1xuICB9XG5cbiAgdmFyIGNvbiA9IE1hdGguYWJzKE1hdGguYWJzKGxhdCkgLSBIQUxGX1BJKTtcbiAgdmFyIHRzLCByaDE7XG4gIGlmIChjb24gPiBFUFNMTikge1xuICAgIHRzID0gdHNmbnoodGhpcy5lLCBsYXQsIE1hdGguc2luKGxhdCkpO1xuICAgIHJoMSA9IHRoaXMuYSAqIHRoaXMuZjAgKiBNYXRoLnBvdyh0cywgdGhpcy5ucyk7XG4gIH1cbiAgZWxzZSB7XG4gICAgY29uID0gbGF0ICogdGhpcy5ucztcbiAgICBpZiAoY29uIDw9IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByaDEgPSAwO1xuICB9XG4gIHZhciB0aGV0YSA9IHRoaXMubnMgKiBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICBwLnggPSB0aGlzLmswICogKHJoMSAqIE1hdGguc2luKHRoZXRhKSkgKyB0aGlzLngwO1xuICBwLnkgPSB0aGlzLmswICogKHRoaXMucmggLSByaDEgKiBNYXRoLmNvcyh0aGV0YSkpICsgdGhpcy55MDtcblxuICByZXR1cm4gcDtcbn1cblxuLy8gTGFtYmVydCBDb25mb3JtYWwgQ29uaWMgaW52ZXJzZSBlcXVhdGlvbnMtLW1hcHBpbmcgeCx5IHRvIGxhdC9sb25nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuXG4gIHZhciByaDEsIGNvbiwgdHM7XG4gIHZhciBsYXQsIGxvbjtcbiAgdmFyIHggPSAocC54IC0gdGhpcy54MCkgLyB0aGlzLmswO1xuICB2YXIgeSA9ICh0aGlzLnJoIC0gKHAueSAtIHRoaXMueTApIC8gdGhpcy5rMCk7XG4gIGlmICh0aGlzLm5zID4gMCkge1xuICAgIHJoMSA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICBjb24gPSAxO1xuICB9XG4gIGVsc2Uge1xuICAgIHJoMSA9IC1NYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgY29uID0gLTE7XG4gIH1cbiAgdmFyIHRoZXRhID0gMDtcbiAgaWYgKHJoMSAhPT0gMCkge1xuICAgIHRoZXRhID0gTWF0aC5hdGFuMigoY29uICogeCksIChjb24gKiB5KSk7XG4gIH1cbiAgaWYgKChyaDEgIT09IDApIHx8ICh0aGlzLm5zID4gMCkpIHtcbiAgICBjb24gPSAxIC8gdGhpcy5ucztcbiAgICB0cyA9IE1hdGgucG93KChyaDEgLyAodGhpcy5hICogdGhpcy5mMCkpLCBjb24pO1xuICAgIGxhdCA9IHBoaTJ6KHRoaXMuZSwgdHMpO1xuICAgIGlmIChsYXQgPT09IC05OTk5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgbGF0ID0gLUhBTEZfUEk7XG4gIH1cbiAgbG9uID0gYWRqdXN0X2xvbih0aGV0YSAvIHRoaXMubnMgKyB0aGlzLmxvbmcwKTtcblxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJMYW1iZXJ0IFRhbmdlbnRpYWwgQ29uZm9ybWFsIENvbmljIFByb2plY3Rpb25cIiwgXCJMYW1iZXJ0X0NvbmZvcm1hbF9Db25pY1wiLCBcIkxhbWJlcnRfQ29uZm9ybWFsX0NvbmljXzJTUFwiLCBcImxjY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy5hID0gNjM3NzM5Ny4xNTU7XG4gIHRoaXMuZXMgPSAwLjAwNjY3NDM3MjIzMDYxNDtcbiAgdGhpcy5lID0gTWF0aC5zcXJ0KHRoaXMuZXMpO1xuICBpZiAoIXRoaXMubGF0MCkge1xuICAgIHRoaXMubGF0MCA9IDAuODYzOTM3OTc5NzM3MTkzO1xuICB9XG4gIGlmICghdGhpcy5sb25nMCkge1xuICAgIHRoaXMubG9uZzAgPSAwLjc0MTc2NDkzMjA5NzU5MDEgLSAwLjMwODM0MTUwMTE4NTY2NTtcbiAgfVxuICAvKiBpZiBzY2FsZSBub3Qgc2V0IGRlZmF1bHQgdG8gMC45OTk5ICovXG4gIGlmICghdGhpcy5rMCkge1xuICAgIHRoaXMuazAgPSAwLjk5OTk7XG4gIH1cbiAgdGhpcy5zNDUgPSAwLjc4NTM5ODE2MzM5NzQ0ODsgLyogNDUgKi9cbiAgdGhpcy5zOTAgPSAyICogdGhpcy5zNDU7XG4gIHRoaXMuZmkwID0gdGhpcy5sYXQwO1xuICB0aGlzLmUyID0gdGhpcy5lcztcbiAgdGhpcy5lID0gTWF0aC5zcXJ0KHRoaXMuZTIpO1xuICB0aGlzLmFsZmEgPSBNYXRoLnNxcnQoMSArICh0aGlzLmUyICogTWF0aC5wb3coTWF0aC5jb3ModGhpcy5maTApLCA0KSkgLyAoMSAtIHRoaXMuZTIpKTtcbiAgdGhpcy51cSA9IDEuMDQyMTY4NTYzODA0NzQ7XG4gIHRoaXMudTAgPSBNYXRoLmFzaW4oTWF0aC5zaW4odGhpcy5maTApIC8gdGhpcy5hbGZhKTtcbiAgdGhpcy5nID0gTWF0aC5wb3coKDEgKyB0aGlzLmUgKiBNYXRoLnNpbih0aGlzLmZpMCkpIC8gKDEgLSB0aGlzLmUgKiBNYXRoLnNpbih0aGlzLmZpMCkpLCB0aGlzLmFsZmEgKiB0aGlzLmUgLyAyKTtcbiAgdGhpcy5rID0gTWF0aC50YW4odGhpcy51MCAvIDIgKyB0aGlzLnM0NSkgLyBNYXRoLnBvdyhNYXRoLnRhbih0aGlzLmZpMCAvIDIgKyB0aGlzLnM0NSksIHRoaXMuYWxmYSkgKiB0aGlzLmc7XG4gIHRoaXMuazEgPSB0aGlzLmswO1xuICB0aGlzLm4wID0gdGhpcy5hICogTWF0aC5zcXJ0KDEgLSB0aGlzLmUyKSAvICgxIC0gdGhpcy5lMiAqIE1hdGgucG93KE1hdGguc2luKHRoaXMuZmkwKSwgMikpO1xuICB0aGlzLnMwID0gMS4zNzAwODM0NjI4MTU1NTtcbiAgdGhpcy5uID0gTWF0aC5zaW4odGhpcy5zMCk7XG4gIHRoaXMucm8wID0gdGhpcy5rMSAqIHRoaXMubjAgLyBNYXRoLnRhbih0aGlzLnMwKTtcbiAgdGhpcy5hZCA9IHRoaXMuczkwIC0gdGhpcy51cTtcbn1cblxuLyogZWxsaXBzb2lkICovXG4vKiBjYWxjdWxhdGUgeHkgZnJvbSBsYXQvbG9uICovXG4vKiBDb25zdGFudHMsIGlkZW50aWNhbCB0byBpbnZlcnNlIHRyYW5zZm9ybSBmdW5jdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgZ2ZpLCB1LCBkZWx0YXYsIHMsIGQsIGVwcywgcm87XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciBkZWx0YV9sb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICAvKiBUcmFuc2Zvcm1hdGlvbiAqL1xuICBnZmkgPSBNYXRoLnBvdygoKDEgKyB0aGlzLmUgKiBNYXRoLnNpbihsYXQpKSAvICgxIC0gdGhpcy5lICogTWF0aC5zaW4obGF0KSkpLCAodGhpcy5hbGZhICogdGhpcy5lIC8gMikpO1xuICB1ID0gMiAqIChNYXRoLmF0YW4odGhpcy5rICogTWF0aC5wb3coTWF0aC50YW4obGF0IC8gMiArIHRoaXMuczQ1KSwgdGhpcy5hbGZhKSAvIGdmaSkgLSB0aGlzLnM0NSk7XG4gIGRlbHRhdiA9IC1kZWx0YV9sb24gKiB0aGlzLmFsZmE7XG4gIHMgPSBNYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5hZCkgKiBNYXRoLnNpbih1KSArIE1hdGguc2luKHRoaXMuYWQpICogTWF0aC5jb3ModSkgKiBNYXRoLmNvcyhkZWx0YXYpKTtcbiAgZCA9IE1hdGguYXNpbihNYXRoLmNvcyh1KSAqIE1hdGguc2luKGRlbHRhdikgLyBNYXRoLmNvcyhzKSk7XG4gIGVwcyA9IHRoaXMubiAqIGQ7XG4gIHJvID0gdGhpcy5ybzAgKiBNYXRoLnBvdyhNYXRoLnRhbih0aGlzLnMwIC8gMiArIHRoaXMuczQ1KSwgdGhpcy5uKSAvIE1hdGgucG93KE1hdGgudGFuKHMgLyAyICsgdGhpcy5zNDUpLCB0aGlzLm4pO1xuICBwLnkgPSBybyAqIE1hdGguY29zKGVwcykgLyAxO1xuICBwLnggPSBybyAqIE1hdGguc2luKGVwcykgLyAxO1xuXG4gIGlmICghdGhpcy5jemVjaCkge1xuICAgIHAueSAqPSAtMTtcbiAgICBwLnggKj0gLTE7XG4gIH1cbiAgcmV0dXJuIChwKTtcbn1cblxuLyogY2FsY3VsYXRlIGxhdC9sb24gZnJvbSB4eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgdSwgZGVsdGF2LCBzLCBkLCBlcHMsIHJvLCBmaTE7XG4gIHZhciBvaztcblxuICAvKiBUcmFuc2Zvcm1hdGlvbiAqL1xuICAvKiByZXZlcnQgeSwgeCovXG4gIHZhciB0bXAgPSBwLng7XG4gIHAueCA9IHAueTtcbiAgcC55ID0gdG1wO1xuICBpZiAoIXRoaXMuY3plY2gpIHtcbiAgICBwLnkgKj0gLTE7XG4gICAgcC54ICo9IC0xO1xuICB9XG4gIHJvID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gIGVwcyA9IE1hdGguYXRhbjIocC55LCBwLngpO1xuICBkID0gZXBzIC8gTWF0aC5zaW4odGhpcy5zMCk7XG4gIHMgPSAyICogKE1hdGguYXRhbihNYXRoLnBvdyh0aGlzLnJvMCAvIHJvLCAxIC8gdGhpcy5uKSAqIE1hdGgudGFuKHRoaXMuczAgLyAyICsgdGhpcy5zNDUpKSAtIHRoaXMuczQ1KTtcbiAgdSA9IE1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmFkKSAqIE1hdGguc2luKHMpIC0gTWF0aC5zaW4odGhpcy5hZCkgKiBNYXRoLmNvcyhzKSAqIE1hdGguY29zKGQpKTtcbiAgZGVsdGF2ID0gTWF0aC5hc2luKE1hdGguY29zKHMpICogTWF0aC5zaW4oZCkgLyBNYXRoLmNvcyh1KSk7XG4gIHAueCA9IHRoaXMubG9uZzAgLSBkZWx0YXYgLyB0aGlzLmFsZmE7XG4gIGZpMSA9IHU7XG4gIG9rID0gMDtcbiAgdmFyIGl0ZXIgPSAwO1xuICBkbyB7XG4gICAgcC55ID0gMiAqIChNYXRoLmF0YW4oTWF0aC5wb3codGhpcy5rLCAtIDEgLyB0aGlzLmFsZmEpICogTWF0aC5wb3coTWF0aC50YW4odSAvIDIgKyB0aGlzLnM0NSksIDEgLyB0aGlzLmFsZmEpICogTWF0aC5wb3coKDEgKyB0aGlzLmUgKiBNYXRoLnNpbihmaTEpKSAvICgxIC0gdGhpcy5lICogTWF0aC5zaW4oZmkxKSksIHRoaXMuZSAvIDIpKSAtIHRoaXMuczQ1KTtcbiAgICBpZiAoTWF0aC5hYnMoZmkxIC0gcC55KSA8IDAuMDAwMDAwMDAwMSkge1xuICAgICAgb2sgPSAxO1xuICAgIH1cbiAgICBmaTEgPSBwLnk7XG4gICAgaXRlciArPSAxO1xuICB9IHdoaWxlIChvayA9PT0gMCAmJiBpdGVyIDwgMTUpO1xuICBpZiAoaXRlciA+PSAxNSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChwKTtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIktyb3Zha1wiLCBcImtyb3Zha1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZTAsIGUxLCBlMiwgZTMsIHBoaSkge1xuICByZXR1cm4gKGUwICogcGhpIC0gZTEgKiBNYXRoLnNpbigyICogcGhpKSArIGUyICogTWF0aC5zaW4oNCAqIHBoaSkgLSBlMyAqIE1hdGguc2luKDYgKiBwaGkpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiAoMSAtIDAuMjUgKiB4ICogKDEgKyB4IC8gMTYgKiAoMyArIDEuMjUgKiB4KSkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuICgwLjM3NSAqIHggKiAoMSArIDAuMjUgKiB4ICogKDEgKyAwLjQ2ODc1ICogeCkpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiAoMC4wNTg1OTM3NSAqIHggKiB4ICogKDEgKyAwLjc1ICogeCkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuICh4ICogeCAqIHggKiAoMzUgLyAzMDcyKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgZSwgc2lucGhpKSB7XG4gIHZhciB0ZW1wID0gZSAqIHNpbnBoaTtcbiAgcmV0dXJuIGEgLyBNYXRoLnNxcnQoMSAtIHRlbXAgKiB0ZW1wKTtcbn0iLCJpbXBvcnQge0hBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuaW1wb3J0IHNpZ24gZnJvbSAnLi9zaWduJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gKE1hdGguYWJzKHgpIDwgSEFMRl9QSSkgPyB4IDogKHggLSAoc2lnbih4KSAqIE1hdGguUEkpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1sLCBlMCwgZTEsIGUyLCBlMykge1xuICB2YXIgcGhpO1xuICB2YXIgZHBoaTtcblxuICBwaGkgPSBtbCAvIGUwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE1OyBpKyspIHtcbiAgICBkcGhpID0gKG1sIC0gKGUwICogcGhpIC0gZTEgKiBNYXRoLnNpbigyICogcGhpKSArIGUyICogTWF0aC5zaW4oNCAqIHBoaSkgLSBlMyAqIE1hdGguc2luKDYgKiBwaGkpKSkgLyAoZTAgLSAyICogZTEgKiBNYXRoLmNvcygyICogcGhpKSArIDQgKiBlMiAqIE1hdGguY29zKDQgKiBwaGkpIC0gNiAqIGUzICogTWF0aC5jb3MoNiAqIHBoaSkpO1xuICAgIHBoaSArPSBkcGhpO1xuICAgIGlmIChNYXRoLmFicyhkcGhpKSA8PSAwLjAwMDAwMDAwMDEpIHtcbiAgICAgIHJldHVybiBwaGk7XG4gICAgfVxuICB9XG5cbiAgLy8uLnJlcG9ydEVycm9yKFwiSU1MRk4tQ09OVjpMYXRpdHVkZSBmYWlsZWQgdG8gY29udmVyZ2UgYWZ0ZXIgMTUgaXRlcmF0aW9uc1wiKTtcbiAgcmV0dXJuIE5hTjtcbn0iLCJpbXBvcnQgbWxmbiBmcm9tICcuLi9jb21tb24vbWxmbic7XG5pbXBvcnQgZTBmbiBmcm9tICcuLi9jb21tb24vZTBmbic7XG5pbXBvcnQgZTFmbiBmcm9tICcuLi9jb21tb24vZTFmbic7XG5pbXBvcnQgZTJmbiBmcm9tICcuLi9jb21tb24vZTJmbic7XG5pbXBvcnQgZTNmbiBmcm9tICcuLi9jb21tb24vZTNmbic7XG5pbXBvcnQgZ04gZnJvbSAnLi4vY29tbW9uL2dOJztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBhZGp1c3RfbGF0IGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbGF0JztcbmltcG9ydCBpbWxmbiBmcm9tICcuLi9jb21tb24vaW1sZm4nO1xuaW1wb3J0IHtIQUxGX1BJLCBFUFNMTn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICBpZiAoIXRoaXMuc3BoZXJlKSB7XG4gICAgdGhpcy5lMCA9IGUwZm4odGhpcy5lcyk7XG4gICAgdGhpcy5lMSA9IGUxZm4odGhpcy5lcyk7XG4gICAgdGhpcy5lMiA9IGUyZm4odGhpcy5lcyk7XG4gICAgdGhpcy5lMyA9IGUzZm4odGhpcy5lcyk7XG4gICAgdGhpcy5tbDAgPSB0aGlzLmEgKiBtbGZuKHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMsIHRoaXMubGF0MCk7XG4gIH1cbn1cblxuLyogQ2Fzc2luaSBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuXG4gIC8qIEZvcndhcmQgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHZhciB4LCB5O1xuICB2YXIgbGFtID0gcC54O1xuICB2YXIgcGhpID0gcC55O1xuICBsYW0gPSBhZGp1c3RfbG9uKGxhbSAtIHRoaXMubG9uZzApO1xuXG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIHggPSB0aGlzLmEgKiBNYXRoLmFzaW4oTWF0aC5jb3MocGhpKSAqIE1hdGguc2luKGxhbSkpO1xuICAgIHkgPSB0aGlzLmEgKiAoTWF0aC5hdGFuMihNYXRoLnRhbihwaGkpLCBNYXRoLmNvcyhsYW0pKSAtIHRoaXMubGF0MCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy9lbGxpcHNvaWRcbiAgICB2YXIgc2lucGhpID0gTWF0aC5zaW4ocGhpKTtcbiAgICB2YXIgY29zcGhpID0gTWF0aC5jb3MocGhpKTtcbiAgICB2YXIgbmwgPSBnTih0aGlzLmEsIHRoaXMuZSwgc2lucGhpKTtcbiAgICB2YXIgdGwgPSBNYXRoLnRhbihwaGkpICogTWF0aC50YW4ocGhpKTtcbiAgICB2YXIgYWwgPSBsYW0gKiBNYXRoLmNvcyhwaGkpO1xuICAgIHZhciBhc3EgPSBhbCAqIGFsO1xuICAgIHZhciBjbCA9IHRoaXMuZXMgKiBjb3NwaGkgKiBjb3NwaGkgLyAoMSAtIHRoaXMuZXMpO1xuICAgIHZhciBtbCA9IHRoaXMuYSAqIG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgcGhpKTtcblxuICAgIHggPSBubCAqIGFsICogKDEgLSBhc3EgKiB0bCAqICgxIC8gNiAtICg4IC0gdGwgKyA4ICogY2wpICogYXNxIC8gMTIwKSk7XG4gICAgeSA9IG1sIC0gdGhpcy5tbDAgKyBubCAqIHNpbnBoaSAvIGNvc3BoaSAqIGFzcSAqICgwLjUgKyAoNSAtIHRsICsgNiAqIGNsKSAqIGFzcSAvIDI0KTtcblxuXG4gIH1cblxuICBwLnggPSB4ICsgdGhpcy54MDtcbiAgcC55ID0geSArIHRoaXMueTA7XG4gIHJldHVybiBwO1xufVxuXG4vKiBJbnZlcnNlIGVxdWF0aW9uc1xuICAtLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgdmFyIHggPSBwLnggLyB0aGlzLmE7XG4gIHZhciB5ID0gcC55IC8gdGhpcy5hO1xuICB2YXIgcGhpLCBsYW07XG5cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgdmFyIGRkID0geSArIHRoaXMubGF0MDtcbiAgICBwaGkgPSBNYXRoLmFzaW4oTWF0aC5zaW4oZGQpICogTWF0aC5jb3MoeCkpO1xuICAgIGxhbSA9IE1hdGguYXRhbjIoTWF0aC50YW4oeCksIE1hdGguY29zKGRkKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgLyogZWxsaXBzb2lkICovXG4gICAgdmFyIG1sMSA9IHRoaXMubWwwIC8gdGhpcy5hICsgeTtcbiAgICB2YXIgcGhpMSA9IGltbGZuKG1sMSwgdGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMyk7XG4gICAgaWYgKE1hdGguYWJzKE1hdGguYWJzKHBoaTEpIC0gSEFMRl9QSSkgPD0gRVBTTE4pIHtcbiAgICAgIHAueCA9IHRoaXMubG9uZzA7XG4gICAgICBwLnkgPSBIQUxGX1BJO1xuICAgICAgaWYgKHkgPCAwKSB7XG4gICAgICAgIHAueSAqPSAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICB2YXIgbmwxID0gZ04odGhpcy5hLCB0aGlzLmUsIE1hdGguc2luKHBoaTEpKTtcblxuICAgIHZhciBybDEgPSBubDEgKiBubDEgKiBubDEgLyB0aGlzLmEgLyB0aGlzLmEgKiAoMSAtIHRoaXMuZXMpO1xuICAgIHZhciB0bDEgPSBNYXRoLnBvdyhNYXRoLnRhbihwaGkxKSwgMik7XG4gICAgdmFyIGRsID0geCAqIHRoaXMuYSAvIG5sMTtcbiAgICB2YXIgZHNxID0gZGwgKiBkbDtcbiAgICBwaGkgPSBwaGkxIC0gbmwxICogTWF0aC50YW4ocGhpMSkgLyBybDEgKiBkbCAqIGRsICogKDAuNSAtICgxICsgMyAqIHRsMSkgKiBkbCAqIGRsIC8gMjQpO1xuICAgIGxhbSA9IGRsICogKDEgLSBkc3EgKiAodGwxIC8gMyArICgxICsgMyAqIHRsMSkgKiB0bDEgKiBkc3EgLyAxNSkpIC8gTWF0aC5jb3MocGhpMSk7XG5cbiAgfVxuXG4gIHAueCA9IGFkanVzdF9sb24obGFtICsgdGhpcy5sb25nMCk7XG4gIHAueSA9IGFkanVzdF9sYXQocGhpKTtcbiAgcmV0dXJuIHA7XG5cbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkNhc3NpbmlcIiwgXCJDYXNzaW5pX1NvbGRuZXJcIiwgXCJjYXNzXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlY2NlbnQsIHNpbnBoaSkge1xuICB2YXIgY29uO1xuICBpZiAoZWNjZW50ID4gMS4wZS03KSB7XG4gICAgY29uID0gZWNjZW50ICogc2lucGhpO1xuICAgIHJldHVybiAoKDEgLSBlY2NlbnQgKiBlY2NlbnQpICogKHNpbnBoaSAvICgxIC0gY29uICogY29uKSAtICgwLjUgLyBlY2NlbnQpICogTWF0aC5sb2coKDEgLSBjb24pIC8gKDEgKyBjb24pKSkpO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiAoMiAqIHNpbnBoaSk7XG4gIH1cbn0iLCJcbmltcG9ydCB7SEFMRl9QSSwgRVBTTE4sIEZPUlRQSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmltcG9ydCBxc2ZueiBmcm9tICcuLi9jb21tb24vcXNmbnonO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG4vKlxuICByZWZlcmVuY2VcbiAgICBcIk5ldyBFcXVhbC1BcmVhIE1hcCBQcm9qZWN0aW9ucyBmb3IgTm9uY2lyY3VsYXIgUmVnaW9uc1wiLCBKb2huIFAuIFNueWRlcixcbiAgICBUaGUgQW1lcmljYW4gQ2FydG9ncmFwaGVyLCBWb2wgMTUsIE5vLiA0LCBPY3RvYmVyIDE5ODgsIHBwLiAzNDEtMzU1LlxuICAqL1xuXG5leHBvcnQgdmFyIFNfUE9MRSA9IDE7XG5cbmV4cG9ydCB2YXIgTl9QT0xFID0gMjtcbmV4cG9ydCB2YXIgRVFVSVQgPSAzO1xuZXhwb3J0IHZhciBPQkxJUSA9IDQ7XG5cbi8qIEluaXRpYWxpemUgdGhlIExhbWJlcnQgQXppbXV0aGFsIEVxdWFsIEFyZWEgcHJvamVjdGlvblxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHZhciB0ID0gTWF0aC5hYnModGhpcy5sYXQwKTtcbiAgaWYgKE1hdGguYWJzKHQgLSBIQUxGX1BJKSA8IEVQU0xOKSB7XG4gICAgdGhpcy5tb2RlID0gdGhpcy5sYXQwIDwgMCA/IHRoaXMuU19QT0xFIDogdGhpcy5OX1BPTEU7XG4gIH1cbiAgZWxzZSBpZiAoTWF0aC5hYnModCkgPCBFUFNMTikge1xuICAgIHRoaXMubW9kZSA9IHRoaXMuRVFVSVQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5tb2RlID0gdGhpcy5PQkxJUTtcbiAgfVxuICBpZiAodGhpcy5lcyA+IDApIHtcbiAgICB2YXIgc2lucGhpO1xuXG4gICAgdGhpcy5xcCA9IHFzZm56KHRoaXMuZSwgMSk7XG4gICAgdGhpcy5tbWYgPSAwLjUgLyAoMSAtIHRoaXMuZXMpO1xuICAgIHRoaXMuYXBhID0gYXV0aHNldCh0aGlzLmVzKTtcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgdGhpcy5OX1BPTEU6XG4gICAgICB0aGlzLmRkID0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5TX1BPTEU6XG4gICAgICB0aGlzLmRkID0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5FUVVJVDpcbiAgICAgIHRoaXMucnEgPSBNYXRoLnNxcnQoMC41ICogdGhpcy5xcCk7XG4gICAgICB0aGlzLmRkID0gMSAvIHRoaXMucnE7XG4gICAgICB0aGlzLnhtZiA9IDE7XG4gICAgICB0aGlzLnltZiA9IDAuNSAqIHRoaXMucXA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRoaXMuT0JMSVE6XG4gICAgICB0aGlzLnJxID0gTWF0aC5zcXJ0KDAuNSAqIHRoaXMucXApO1xuICAgICAgc2lucGhpID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgICAgIHRoaXMuc2luYjEgPSBxc2Zueih0aGlzLmUsIHNpbnBoaSkgLyB0aGlzLnFwO1xuICAgICAgdGhpcy5jb3NiMSA9IE1hdGguc3FydCgxIC0gdGhpcy5zaW5iMSAqIHRoaXMuc2luYjEpO1xuICAgICAgdGhpcy5kZCA9IE1hdGguY29zKHRoaXMubGF0MCkgLyAoTWF0aC5zcXJ0KDEgLSB0aGlzLmVzICogc2lucGhpICogc2lucGhpKSAqIHRoaXMucnEgKiB0aGlzLmNvc2IxKTtcbiAgICAgIHRoaXMueW1mID0gKHRoaXMueG1mID0gdGhpcy5ycSkgLyB0aGlzLmRkO1xuICAgICAgdGhpcy54bWYgKj0gdGhpcy5kZDtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk9CTElRKSB7XG4gICAgICB0aGlzLnNpbnBoMCA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gICAgICB0aGlzLmNvc3BoMCA9IE1hdGguY29zKHRoaXMubGF0MCk7XG4gICAgfVxuICB9XG59XG5cbi8qIExhbWJlcnQgQXppbXV0aGFsIEVxdWFsIEFyZWEgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcblxuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICB2YXIgeCwgeSwgY29zbGFtLCBzaW5sYW0sIHNpbnBoaSwgcSwgc2luYiwgY29zYiwgYiwgY29zcGhpO1xuICB2YXIgbGFtID0gcC54O1xuICB2YXIgcGhpID0gcC55O1xuXG4gIGxhbSA9IGFkanVzdF9sb24obGFtIC0gdGhpcy5sb25nMCk7XG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIHNpbnBoaSA9IE1hdGguc2luKHBoaSk7XG4gICAgY29zcGhpID0gTWF0aC5jb3MocGhpKTtcbiAgICBjb3NsYW0gPSBNYXRoLmNvcyhsYW0pO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEgfHwgdGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSB7XG4gICAgICB5ID0gKHRoaXMubW9kZSA9PT0gdGhpcy5FUVVJVCkgPyAxICsgY29zcGhpICogY29zbGFtIDogMSArIHRoaXMuc2lucGgwICogc2lucGhpICsgdGhpcy5jb3NwaDAgKiBjb3NwaGkgKiBjb3NsYW07XG4gICAgICBpZiAoeSA8PSBFUFNMTikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHkgPSBNYXRoLnNxcnQoMiAvIHkpO1xuICAgICAgeCA9IHkgKiBjb3NwaGkgKiBNYXRoLnNpbihsYW0pO1xuICAgICAgeSAqPSAodGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSA/IHNpbnBoaSA6IHRoaXMuY29zcGgwICogc2lucGhpIC0gdGhpcy5zaW5waDAgKiBjb3NwaGkgKiBjb3NsYW07XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5OX1BPTEUgfHwgdGhpcy5tb2RlID09PSB0aGlzLlNfUE9MRSkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5OX1BPTEUpIHtcbiAgICAgICAgY29zbGFtID0gLWNvc2xhbTtcbiAgICAgIH1cbiAgICAgIGlmIChNYXRoLmFicyhwaGkgKyB0aGlzLmxhdDApIDwgRVBTTE4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB5ID0gRk9SVFBJIC0gcGhpICogMC41O1xuICAgICAgeSA9IDIgKiAoKHRoaXMubW9kZSA9PT0gdGhpcy5TX1BPTEUpID8gTWF0aC5jb3MoeSkgOiBNYXRoLnNpbih5KSk7XG4gICAgICB4ID0geSAqIE1hdGguc2luKGxhbSk7XG4gICAgICB5ICo9IGNvc2xhbTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgc2luYiA9IDA7XG4gICAgY29zYiA9IDA7XG4gICAgYiA9IDA7XG4gICAgY29zbGFtID0gTWF0aC5jb3MobGFtKTtcbiAgICBzaW5sYW0gPSBNYXRoLnNpbihsYW0pO1xuICAgIHNpbnBoaSA9IE1hdGguc2luKHBoaSk7XG4gICAgcSA9IHFzZm56KHRoaXMuZSwgc2lucGhpKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk9CTElRIHx8IHRoaXMubW9kZSA9PT0gdGhpcy5FUVVJVCkge1xuICAgICAgc2luYiA9IHEgLyB0aGlzLnFwO1xuICAgICAgY29zYiA9IE1hdGguc3FydCgxIC0gc2luYiAqIHNpbmIpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgdGhpcy5PQkxJUTpcbiAgICAgIGIgPSAxICsgdGhpcy5zaW5iMSAqIHNpbmIgKyB0aGlzLmNvc2IxICogY29zYiAqIGNvc2xhbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5FUVVJVDpcbiAgICAgIGIgPSAxICsgY29zYiAqIGNvc2xhbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5OX1BPTEU6XG4gICAgICBiID0gSEFMRl9QSSArIHBoaTtcbiAgICAgIHEgPSB0aGlzLnFwIC0gcTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5TX1BPTEU6XG4gICAgICBiID0gcGhpIC0gSEFMRl9QSTtcbiAgICAgIHEgPSB0aGlzLnFwICsgcTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoTWF0aC5hYnMoYikgPCBFUFNMTikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSB0aGlzLk9CTElROlxuICAgIGNhc2UgdGhpcy5FUVVJVDpcbiAgICAgIGIgPSBNYXRoLnNxcnQoMiAvIGIpO1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5PQkxJUSkge1xuICAgICAgICB5ID0gdGhpcy55bWYgKiBiICogKHRoaXMuY29zYjEgKiBzaW5iIC0gdGhpcy5zaW5iMSAqIGNvc2IgKiBjb3NsYW0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHkgPSAoYiA9IE1hdGguc3FydCgyIC8gKDEgKyBjb3NiICogY29zbGFtKSkpICogc2luYiAqIHRoaXMueW1mO1xuICAgICAgfVxuICAgICAgeCA9IHRoaXMueG1mICogYiAqIGNvc2IgKiBzaW5sYW07XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRoaXMuTl9QT0xFOlxuICAgIGNhc2UgdGhpcy5TX1BPTEU6XG4gICAgICBpZiAocSA+PSAwKSB7XG4gICAgICAgIHggPSAoYiA9IE1hdGguc3FydChxKSkgKiBzaW5sYW07XG4gICAgICAgIHkgPSBjb3NsYW0gKiAoKHRoaXMubW9kZSA9PT0gdGhpcy5TX1BPTEUpID8gYiA6IC1iKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB4ID0geSA9IDA7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwLnggPSB0aGlzLmEgKiB4ICsgdGhpcy54MDtcbiAgcC55ID0gdGhpcy5hICogeSArIHRoaXMueTA7XG4gIHJldHVybiBwO1xufVxuXG4vKiBJbnZlcnNlIGVxdWF0aW9uc1xuICAtLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgdmFyIHggPSBwLnggLyB0aGlzLmE7XG4gIHZhciB5ID0gcC55IC8gdGhpcy5hO1xuICB2YXIgbGFtLCBwaGksIGNDZSwgc0NlLCBxLCByaG8sIGFiO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICB2YXIgY29zeiA9IDAsXG4gICAgICByaCwgc2lueiA9IDA7XG5cbiAgICByaCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICBwaGkgPSByaCAqIDAuNTtcbiAgICBpZiAocGhpID4gMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHBoaSA9IDIgKiBNYXRoLmFzaW4ocGhpKTtcbiAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk9CTElRIHx8IHRoaXMubW9kZSA9PT0gdGhpcy5FUVVJVCkge1xuICAgICAgc2lueiA9IE1hdGguc2luKHBoaSk7XG4gICAgICBjb3N6ID0gTWF0aC5jb3MocGhpKTtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICBjYXNlIHRoaXMuRVFVSVQ6XG4gICAgICBwaGkgPSAoTWF0aC5hYnMocmgpIDw9IEVQU0xOKSA/IDAgOiBNYXRoLmFzaW4oeSAqIHNpbnogLyByaCk7XG4gICAgICB4ICo9IHNpbno7XG4gICAgICB5ID0gY29zeiAqIHJoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLk9CTElROlxuICAgICAgcGhpID0gKE1hdGguYWJzKHJoKSA8PSBFUFNMTikgPyB0aGlzLmxhdDAgOiBNYXRoLmFzaW4oY29zeiAqIHRoaXMuc2lucGgwICsgeSAqIHNpbnogKiB0aGlzLmNvc3BoMCAvIHJoKTtcbiAgICAgIHggKj0gc2lueiAqIHRoaXMuY29zcGgwO1xuICAgICAgeSA9IChjb3N6IC0gTWF0aC5zaW4ocGhpKSAqIHRoaXMuc2lucGgwKSAqIHJoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLk5fUE9MRTpcbiAgICAgIHkgPSAteTtcbiAgICAgIHBoaSA9IEhBTEZfUEkgLSBwaGk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRoaXMuU19QT0xFOlxuICAgICAgcGhpIC09IEhBTEZfUEk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbGFtID0gKHkgPT09IDAgJiYgKHRoaXMubW9kZSA9PT0gdGhpcy5FUVVJVCB8fCB0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEpKSA/IDAgOiBNYXRoLmF0YW4yKHgsIHkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGFiID0gMDtcbiAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk9CTElRIHx8IHRoaXMubW9kZSA9PT0gdGhpcy5FUVVJVCkge1xuICAgICAgeCAvPSB0aGlzLmRkO1xuICAgICAgeSAqPSB0aGlzLmRkO1xuICAgICAgcmhvID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgICAgaWYgKHJobyA8IEVQU0xOKSB7XG4gICAgICAgIHAueCA9IHRoaXMubG9uZzA7XG4gICAgICAgIHAueSA9IHRoaXMubGF0MDtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgICBzQ2UgPSAyICogTWF0aC5hc2luKDAuNSAqIHJobyAvIHRoaXMucnEpO1xuICAgICAgY0NlID0gTWF0aC5jb3Moc0NlKTtcbiAgICAgIHggKj0gKHNDZSA9IE1hdGguc2luKHNDZSkpO1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5PQkxJUSkge1xuICAgICAgICBhYiA9IGNDZSAqIHRoaXMuc2luYjEgKyB5ICogc0NlICogdGhpcy5jb3NiMSAvIHJobztcbiAgICAgICAgcSA9IHRoaXMucXAgKiBhYjtcbiAgICAgICAgeSA9IHJobyAqIHRoaXMuY29zYjEgKiBjQ2UgLSB5ICogdGhpcy5zaW5iMSAqIHNDZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBhYiA9IHkgKiBzQ2UgLyByaG87XG4gICAgICAgIHEgPSB0aGlzLnFwICogYWI7XG4gICAgICAgIHkgPSByaG8gKiBjQ2U7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5OX1BPTEUgfHwgdGhpcy5tb2RlID09PSB0aGlzLlNfUE9MRSkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5OX1BPTEUpIHtcbiAgICAgICAgeSA9IC15O1xuICAgICAgfVxuICAgICAgcSA9ICh4ICogeCArIHkgKiB5KTtcbiAgICAgIGlmICghcSkge1xuICAgICAgICBwLnggPSB0aGlzLmxvbmcwO1xuICAgICAgICBwLnkgPSB0aGlzLmxhdDA7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfVxuICAgICAgYWIgPSAxIC0gcSAvIHRoaXMucXA7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLlNfUE9MRSkge1xuICAgICAgICBhYiA9IC1hYjtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFtID0gTWF0aC5hdGFuMih4LCB5KTtcbiAgICBwaGkgPSBhdXRobGF0KE1hdGguYXNpbihhYiksIHRoaXMuYXBhKTtcbiAgfVxuXG4gIHAueCA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIGxhbSk7XG4gIHAueSA9IHBoaTtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIGRldGVybWluZSBsYXRpdHVkZSBmcm9tIGF1dGhhbGljIGxhdGl0dWRlICovXG52YXIgUDAwID0gMC4zMzMzMzMzMzMzMzMzMzMzMzMzMztcblxudmFyIFAwMSA9IDAuMTcyMjIyMjIyMjIyMjIyMjIyMjI7XG52YXIgUDAyID0gMC4xMDI1NzkzNjUwNzkzNjUwNzkzNjtcbnZhciBQMTAgPSAwLjA2Mzg4ODg4ODg4ODg4ODg4ODg4O1xudmFyIFAxMSA9IDAuMDY2NDAyMTE2NDAyMTE2NDAyMTE7XG52YXIgUDIwID0gMC4wMTY0MTUwMTI5NDIxOTE1NDQ0MztcblxuZnVuY3Rpb24gYXV0aHNldChlcykge1xuICB2YXIgdDtcbiAgdmFyIEFQQSA9IFtdO1xuICBBUEFbMF0gPSBlcyAqIFAwMDtcbiAgdCA9IGVzICogZXM7XG4gIEFQQVswXSArPSB0ICogUDAxO1xuICBBUEFbMV0gPSB0ICogUDEwO1xuICB0ICo9IGVzO1xuICBBUEFbMF0gKz0gdCAqIFAwMjtcbiAgQVBBWzFdICs9IHQgKiBQMTE7XG4gIEFQQVsyXSA9IHQgKiBQMjA7XG4gIHJldHVybiBBUEE7XG59XG5cbmZ1bmN0aW9uIGF1dGhsYXQoYmV0YSwgQVBBKSB7XG4gIHZhciB0ID0gYmV0YSArIGJldGE7XG4gIHJldHVybiAoYmV0YSArIEFQQVswXSAqIE1hdGguc2luKHQpICsgQVBBWzFdICogTWF0aC5zaW4odCArIHQpICsgQVBBWzJdICogTWF0aC5zaW4odCArIHQgKyB0KSk7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJMYW1iZXJ0IEF6aW11dGhhbCBFcXVhbCBBcmVhXCIsIFwiTGFtYmVydF9BemltdXRoYWxfRXF1YWxfQXJlYVwiLCBcImxhZWFcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lcyxcbiAgU19QT0xFOiBTX1BPTEUsXG4gIE5fUE9MRTogTl9QT0xFLFxuICBFUVVJVDogRVFVSVQsXG4gIE9CTElROiBPQkxJUVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgaWYgKE1hdGguYWJzKHgpID4gMSkge1xuICAgIHggPSAoeCA+IDEpID8gMSA6IC0xO1xuICB9XG4gIHJldHVybiBNYXRoLmFzaW4oeCk7XG59IiwiaW1wb3J0IG1zZm56IGZyb20gJy4uL2NvbW1vbi9tc2Zueic7XG5pbXBvcnQgcXNmbnogZnJvbSAnLi4vY29tbW9uL3FzZm56JztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBhc2lueiBmcm9tICcuLi9jb21tb24vYXNpbnonO1xuaW1wb3J0IHtFUFNMTn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxhdDEgKyB0aGlzLmxhdDIpIDwgRVBTTE4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy50ZW1wID0gdGhpcy5iIC8gdGhpcy5hO1xuICB0aGlzLmVzID0gMSAtIE1hdGgucG93KHRoaXMudGVtcCwgMik7XG4gIHRoaXMuZTMgPSBNYXRoLnNxcnQodGhpcy5lcyk7XG5cbiAgdGhpcy5zaW5fcG8gPSBNYXRoLnNpbih0aGlzLmxhdDEpO1xuICB0aGlzLmNvc19wbyA9IE1hdGguY29zKHRoaXMubGF0MSk7XG4gIHRoaXMudDEgPSB0aGlzLnNpbl9wbztcbiAgdGhpcy5jb24gPSB0aGlzLnNpbl9wbztcbiAgdGhpcy5tczEgPSBtc2Zueih0aGlzLmUzLCB0aGlzLnNpbl9wbywgdGhpcy5jb3NfcG8pO1xuICB0aGlzLnFzMSA9IHFzZm56KHRoaXMuZTMsIHRoaXMuc2luX3BvLCB0aGlzLmNvc19wbyk7XG5cbiAgdGhpcy5zaW5fcG8gPSBNYXRoLnNpbih0aGlzLmxhdDIpO1xuICB0aGlzLmNvc19wbyA9IE1hdGguY29zKHRoaXMubGF0Mik7XG4gIHRoaXMudDIgPSB0aGlzLnNpbl9wbztcbiAgdGhpcy5tczIgPSBtc2Zueih0aGlzLmUzLCB0aGlzLnNpbl9wbywgdGhpcy5jb3NfcG8pO1xuICB0aGlzLnFzMiA9IHFzZm56KHRoaXMuZTMsIHRoaXMuc2luX3BvLCB0aGlzLmNvc19wbyk7XG5cbiAgdGhpcy5zaW5fcG8gPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICB0aGlzLmNvc19wbyA9IE1hdGguY29zKHRoaXMubGF0MCk7XG4gIHRoaXMudDMgPSB0aGlzLnNpbl9wbztcbiAgdGhpcy5xczAgPSBxc2Zueih0aGlzLmUzLCB0aGlzLnNpbl9wbywgdGhpcy5jb3NfcG8pO1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxhdDEgLSB0aGlzLmxhdDIpID4gRVBTTE4pIHtcbiAgICB0aGlzLm5zMCA9ICh0aGlzLm1zMSAqIHRoaXMubXMxIC0gdGhpcy5tczIgKiB0aGlzLm1zMikgLyAodGhpcy5xczIgLSB0aGlzLnFzMSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5uczAgPSB0aGlzLmNvbjtcbiAgfVxuICB0aGlzLmMgPSB0aGlzLm1zMSAqIHRoaXMubXMxICsgdGhpcy5uczAgKiB0aGlzLnFzMTtcbiAgdGhpcy5yaCA9IHRoaXMuYSAqIE1hdGguc3FydCh0aGlzLmMgLSB0aGlzLm5zMCAqIHRoaXMucXMwKSAvIHRoaXMubnMwO1xufVxuXG4vKiBBbGJlcnMgQ29uaWNhbCBFcXVhbCBBcmVhIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcblxuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuXG4gIHRoaXMuc2luX3BoaSA9IE1hdGguc2luKGxhdCk7XG4gIHRoaXMuY29zX3BoaSA9IE1hdGguY29zKGxhdCk7XG5cbiAgdmFyIHFzID0gcXNmbnoodGhpcy5lMywgdGhpcy5zaW5fcGhpLCB0aGlzLmNvc19waGkpO1xuICB2YXIgcmgxID0gdGhpcy5hICogTWF0aC5zcXJ0KHRoaXMuYyAtIHRoaXMubnMwICogcXMpIC8gdGhpcy5uczA7XG4gIHZhciB0aGV0YSA9IHRoaXMubnMwICogYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgdmFyIHggPSByaDEgKiBNYXRoLnNpbih0aGV0YSkgKyB0aGlzLngwO1xuICB2YXIgeSA9IHRoaXMucmggLSByaDEgKiBNYXRoLmNvcyh0aGV0YSkgKyB0aGlzLnkwO1xuXG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciByaDEsIHFzLCBjb24sIHRoZXRhLCBsb24sIGxhdDtcblxuICBwLnggLT0gdGhpcy54MDtcbiAgcC55ID0gdGhpcy5yaCAtIHAueSArIHRoaXMueTA7XG4gIGlmICh0aGlzLm5zMCA+PSAwKSB7XG4gICAgcmgxID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gICAgY29uID0gMTtcbiAgfVxuICBlbHNlIHtcbiAgICByaDEgPSAtTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gICAgY29uID0gLTE7XG4gIH1cbiAgdGhldGEgPSAwO1xuICBpZiAocmgxICE9PSAwKSB7XG4gICAgdGhldGEgPSBNYXRoLmF0YW4yKGNvbiAqIHAueCwgY29uICogcC55KTtcbiAgfVxuICBjb24gPSByaDEgKiB0aGlzLm5zMCAvIHRoaXMuYTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgbGF0ID0gTWF0aC5hc2luKCh0aGlzLmMgLSBjb24gKiBjb24pIC8gKDIgKiB0aGlzLm5zMCkpO1xuICB9XG4gIGVsc2Uge1xuICAgIHFzID0gKHRoaXMuYyAtIGNvbiAqIGNvbikgLyB0aGlzLm5zMDtcbiAgICBsYXQgPSB0aGlzLnBoaTF6KHRoaXMuZTMsIHFzKTtcbiAgfVxuXG4gIGxvbiA9IGFkanVzdF9sb24odGhldGEgLyB0aGlzLm5zMCArIHRoaXMubG9uZzApO1xuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEZ1bmN0aW9uIHRvIGNvbXB1dGUgcGhpMSwgdGhlIGxhdGl0dWRlIGZvciB0aGUgaW52ZXJzZSBvZiB0aGVcbiAgIEFsYmVycyBDb25pY2FsIEVxdWFsLUFyZWEgcHJvamVjdGlvbi5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIHBoaTF6KGVjY2VudCwgcXMpIHtcbiAgdmFyIHNpbnBoaSwgY29zcGhpLCBjb24sIGNvbSwgZHBoaTtcbiAgdmFyIHBoaSA9IGFzaW56KDAuNSAqIHFzKTtcbiAgaWYgKGVjY2VudCA8IEVQU0xOKSB7XG4gICAgcmV0dXJuIHBoaTtcbiAgfVxuXG4gIHZhciBlY2NudHMgPSBlY2NlbnQgKiBlY2NlbnQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IDI1OyBpKyspIHtcbiAgICBzaW5waGkgPSBNYXRoLnNpbihwaGkpO1xuICAgIGNvc3BoaSA9IE1hdGguY29zKHBoaSk7XG4gICAgY29uID0gZWNjZW50ICogc2lucGhpO1xuICAgIGNvbSA9IDEgLSBjb24gKiBjb247XG4gICAgZHBoaSA9IDAuNSAqIGNvbSAqIGNvbSAvIGNvc3BoaSAqIChxcyAvICgxIC0gZWNjbnRzKSAtIHNpbnBoaSAvIGNvbSArIDAuNSAvIGVjY2VudCAqIE1hdGgubG9nKCgxIC0gY29uKSAvICgxICsgY29uKSkpO1xuICAgIHBoaSA9IHBoaSArIGRwaGk7XG4gICAgaWYgKE1hdGguYWJzKGRwaGkpIDw9IDFlLTcpIHtcbiAgICAgIHJldHVybiBwaGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiQWxiZXJzX0NvbmljX0VxdWFsX0FyZWFcIiwgXCJBbGJlcnNcIiwgXCJhZWFcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lcyxcbiAgcGhpMXo6IHBoaTF6XG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFzaW56IGZyb20gJy4uL2NvbW1vbi9hc2lueic7XG5pbXBvcnQge0VQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuLypcbiAgcmVmZXJlbmNlOlxuICAgIFdvbGZyYW0gTWF0aHdvcmxkIFwiR25vbW9uaWMgUHJvamVjdGlvblwiXG4gICAgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9Hbm9tb25pY1Byb2plY3Rpb24uaHRtbFxuICAgIEFjY2Vzc2VkOiAxMnRoIE5vdmVtYmVyIDIwMDlcbiAgKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuXG4gIC8qIFBsYWNlIHBhcmFtZXRlcnMgaW4gc3RhdGljIHN0b3JhZ2UgZm9yIGNvbW1vbiB1c2VcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuICB0aGlzLnNpbl9wMTQgPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICB0aGlzLmNvc19wMTQgPSBNYXRoLmNvcyh0aGlzLmxhdDApO1xuICAvLyBBcHByb3hpbWF0aW9uIGZvciBwcm9qZWN0aW5nIHBvaW50cyB0byB0aGUgaG9yaXpvbiAoaW5maW5pdHkpXG4gIHRoaXMuaW5maW5pdHlfZGlzdCA9IDEwMDAgKiB0aGlzLmE7XG4gIHRoaXMucmMgPSAxO1xufVxuXG4vKiBHbm9tb25pYyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgc2lucGhpLCBjb3NwaGk7IC8qIHNpbiBhbmQgY29zIHZhbHVlICAgICAgICAqL1xuICB2YXIgZGxvbjsgLyogZGVsdGEgbG9uZ2l0dWRlIHZhbHVlICAgICAgKi9cbiAgdmFyIGNvc2xvbjsgLyogY29zIG9mIGxvbmdpdHVkZSAgICAgICAgKi9cbiAgdmFyIGtzcDsgLyogc2NhbGUgZmFjdG9yICAgICAgICAgICovXG4gIHZhciBnO1xuICB2YXIgeCwgeTtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG5cbiAgc2lucGhpID0gTWF0aC5zaW4obGF0KTtcbiAgY29zcGhpID0gTWF0aC5jb3MobGF0KTtcblxuICBjb3Nsb24gPSBNYXRoLmNvcyhkbG9uKTtcbiAgZyA9IHRoaXMuc2luX3AxNCAqIHNpbnBoaSArIHRoaXMuY29zX3AxNCAqIGNvc3BoaSAqIGNvc2xvbjtcbiAga3NwID0gMTtcbiAgaWYgKChnID4gMCkgfHwgKE1hdGguYWJzKGcpIDw9IEVQU0xOKSkge1xuICAgIHggPSB0aGlzLngwICsgdGhpcy5hICoga3NwICogY29zcGhpICogTWF0aC5zaW4oZGxvbikgLyBnO1xuICAgIHkgPSB0aGlzLnkwICsgdGhpcy5hICoga3NwICogKHRoaXMuY29zX3AxNCAqIHNpbnBoaSAtIHRoaXMuc2luX3AxNCAqIGNvc3BoaSAqIGNvc2xvbikgLyBnO1xuICB9XG4gIGVsc2Uge1xuXG4gICAgLy8gUG9pbnQgaXMgaW4gdGhlIG9wcG9zaW5nIGhlbWlzcGhlcmUgYW5kIGlzIHVucHJvamVjdGFibGVcbiAgICAvLyBXZSBzdGlsbCBuZWVkIHRvIHJldHVybiBhIHJlYXNvbmFibGUgcG9pbnQsIHNvIHdlIHByb2plY3RcbiAgICAvLyB0byBpbmZpbml0eSwgb24gYSBiZWFyaW5nXG4gICAgLy8gZXF1aXZhbGVudCB0byB0aGUgbm9ydGhlcm4gaGVtaXNwaGVyZSBlcXVpdmFsZW50XG4gICAgLy8gVGhpcyBpcyBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvbiBmb3Igc2hvcnQgc2hhcGVzIGFuZCBsaW5lcyB0aGF0XG4gICAgLy8gc3RyYWRkbGUgdGhlIGhvcml6b24uXG5cbiAgICB4ID0gdGhpcy54MCArIHRoaXMuaW5maW5pdHlfZGlzdCAqIGNvc3BoaSAqIE1hdGguc2luKGRsb24pO1xuICAgIHkgPSB0aGlzLnkwICsgdGhpcy5pbmZpbml0eV9kaXN0ICogKHRoaXMuY29zX3AxNCAqIHNpbnBoaSAtIHRoaXMuc2luX3AxNCAqIGNvc3BoaSAqIGNvc2xvbik7XG5cbiAgfVxuICBwLnggPSB4O1xuICBwLnkgPSB5O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgcmg7IC8qIFJobyAqL1xuICB2YXIgc2luYywgY29zYztcbiAgdmFyIGM7XG4gIHZhciBsb24sIGxhdDtcblxuICAvKiBJbnZlcnNlIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICBwLnggPSAocC54IC0gdGhpcy54MCkgLyB0aGlzLmE7XG4gIHAueSA9IChwLnkgLSB0aGlzLnkwKSAvIHRoaXMuYTtcblxuICBwLnggLz0gdGhpcy5rMDtcbiAgcC55IC89IHRoaXMuazA7XG5cbiAgaWYgKChyaCA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpKSkge1xuICAgIGMgPSBNYXRoLmF0YW4yKHJoLCB0aGlzLnJjKTtcbiAgICBzaW5jID0gTWF0aC5zaW4oYyk7XG4gICAgY29zYyA9IE1hdGguY29zKGMpO1xuXG4gICAgbGF0ID0gYXNpbnooY29zYyAqIHRoaXMuc2luX3AxNCArIChwLnkgKiBzaW5jICogdGhpcy5jb3NfcDE0KSAvIHJoKTtcbiAgICBsb24gPSBNYXRoLmF0YW4yKHAueCAqIHNpbmMsIHJoICogdGhpcy5jb3NfcDE0ICogY29zYyAtIHAueSAqIHRoaXMuc2luX3AxNCAqIHNpbmMpO1xuICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIGxvbik7XG4gIH1cbiAgZWxzZSB7XG4gICAgbGF0ID0gdGhpcy5waGljMDtcbiAgICBsb24gPSAwO1xuICB9XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiZ25vbVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IHFzZm56IGZyb20gJy4uL2NvbW1vbi9xc2Zueic7XG5pbXBvcnQgbXNmbnogZnJvbSAnLi4vY29tbW9uL21zZm56JztcbmltcG9ydCBpcXNmbnogZnJvbSAnLi4vY29tbW9uL2lxc2Zueic7XG5cbi8qXG4gIHJlZmVyZW5jZTpcbiAgICBcIkNhcnRvZ3JhcGhpYyBQcm9qZWN0aW9uIFByb2NlZHVyZXMgZm9yIHRoZSBVTklYIEVudmlyb25tZW50LVxuICAgIEEgVXNlcidzIE1hbnVhbFwiIGJ5IEdlcmFsZCBJLiBFdmVuZGVuLFxuICAgIFVTR1MgT3BlbiBGaWxlIFJlcG9ydCA5MC0yODRhbmQgUmVsZWFzZSA0IEludGVyaW0gUmVwb3J0cyAoMjAwMylcbiovXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgLy9uby1vcFxuICBpZiAoIXRoaXMuc3BoZXJlKSB7XG4gICAgdGhpcy5rMCA9IG1zZm56KHRoaXMuZSwgTWF0aC5zaW4odGhpcy5sYXRfdHMpLCBNYXRoLmNvcyh0aGlzLmxhdF90cykpO1xuICB9XG59XG5cbi8qIEN5bGluZHJpY2FsIEVxdWFsIEFyZWEgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIHgsIHk7XG4gIC8qIEZvcndhcmQgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHZhciBkbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiBkbG9uICogTWF0aC5jb3ModGhpcy5sYXRfdHMpO1xuICAgIHkgPSB0aGlzLnkwICsgdGhpcy5hICogTWF0aC5zaW4obGF0KSAvIE1hdGguY29zKHRoaXMubGF0X3RzKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgcXMgPSBxc2Zueih0aGlzLmUsIE1hdGguc2luKGxhdCkpO1xuICAgIHggPSB0aGlzLngwICsgdGhpcy5hICogdGhpcy5rMCAqIGRsb247XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmEgKiBxcyAqIDAuNSAvIHRoaXMuazA7XG4gIH1cblxuICBwLnggPSB4O1xuICBwLnkgPSB5O1xuICByZXR1cm4gcDtcbn1cblxuLyogQ3lsaW5kcmljYWwgRXF1YWwgQXJlYSBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICBwLnggLT0gdGhpcy54MDtcbiAgcC55IC09IHRoaXMueTA7XG4gIHZhciBsb24sIGxhdDtcblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyAocC54IC8gdGhpcy5hKSAvIE1hdGguY29zKHRoaXMubGF0X3RzKSk7XG4gICAgbGF0ID0gTWF0aC5hc2luKChwLnkgLyB0aGlzLmEpICogTWF0aC5jb3ModGhpcy5sYXRfdHMpKTtcbiAgfVxuICBlbHNlIHtcbiAgICBsYXQgPSBpcXNmbnoodGhpcy5lLCAyICogcC55ICogdGhpcy5rMCAvIHRoaXMuYSk7XG4gICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgcC54IC8gKHRoaXMuYSAqIHRoaXMuazApKTtcbiAgfVxuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcImNlYVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IHtIQUxGX1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZWNjZW50LCBxKSB7XG4gIHZhciB0ZW1wID0gMSAtICgxIC0gZWNjZW50ICogZWNjZW50KSAvICgyICogZWNjZW50KSAqIE1hdGgubG9nKCgxIC0gZWNjZW50KSAvICgxICsgZWNjZW50KSk7XG4gIGlmIChNYXRoLmFicyhNYXRoLmFicyhxKSAtIHRlbXApIDwgMS4wRS02KSB7XG4gICAgaWYgKHEgPCAwKSB7XG4gICAgICByZXR1cm4gKC0xICogSEFMRl9QSSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIEhBTEZfUEk7XG4gICAgfVxuICB9XG4gIC8vdmFyIHBoaSA9IDAuNSogcS8oMS1lY2NlbnQqZWNjZW50KTtcbiAgdmFyIHBoaSA9IE1hdGguYXNpbigwLjUgKiBxKTtcbiAgdmFyIGRwaGk7XG4gIHZhciBzaW5fcGhpO1xuICB2YXIgY29zX3BoaTtcbiAgdmFyIGNvbjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMDsgaSsrKSB7XG4gICAgc2luX3BoaSA9IE1hdGguc2luKHBoaSk7XG4gICAgY29zX3BoaSA9IE1hdGguY29zKHBoaSk7XG4gICAgY29uID0gZWNjZW50ICogc2luX3BoaTtcbiAgICBkcGhpID0gTWF0aC5wb3coMSAtIGNvbiAqIGNvbiwgMikgLyAoMiAqIGNvc19waGkpICogKHEgLyAoMSAtIGVjY2VudCAqIGVjY2VudCkgLSBzaW5fcGhpIC8gKDEgLSBjb24gKiBjb24pICsgMC41IC8gZWNjZW50ICogTWF0aC5sb2coKDEgLSBjb24pIC8gKDEgKyBjb24pKSk7XG4gICAgcGhpICs9IGRwaGk7XG4gICAgaWYgKE1hdGguYWJzKGRwaGkpIDw9IDAuMDAwMDAwMDAwMSkge1xuICAgICAgcmV0dXJuIHBoaTtcbiAgICB9XG4gIH1cblxuICAvL2NvbnNvbGUubG9nKFwiSVFTRk4tQ09OVjpMYXRpdHVkZSBmYWlsZWQgdG8gY29udmVyZ2UgYWZ0ZXIgMzAgaXRlcmF0aW9uc1wiKTtcbiAgcmV0dXJuIE5hTjtcbn1cbiIsImltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBhZGp1c3RfbGF0IGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbGF0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgdGhpcy54MCA9IHRoaXMueDAgfHwgMDtcbiAgdGhpcy55MCA9IHRoaXMueTAgfHwgMDtcbiAgdGhpcy5sYXQwID0gdGhpcy5sYXQwIHx8IDA7XG4gIHRoaXMubG9uZzAgPSB0aGlzLmxvbmcwIHx8IDA7XG4gIHRoaXMubGF0X3RzID0gdGhpcy5sYXRfdHMgfHwgMDtcbiAgdGhpcy50aXRsZSA9IHRoaXMudGl0bGUgfHwgXCJFcXVpZGlzdGFudCBDeWxpbmRyaWNhbCAoUGxhdGUgQ2FycmUpXCI7XG5cbiAgdGhpcy5yYyA9IE1hdGguY29zKHRoaXMubGF0X3RzKTtcbn1cblxuLy8gZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuXG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG5cbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICB2YXIgZGxhdCA9IGFkanVzdF9sYXQobGF0IC0gdGhpcy5sYXQwKTtcbiAgcC54ID0gdGhpcy54MCArICh0aGlzLmEgKiBkbG9uICogdGhpcy5yYyk7XG4gIHAueSA9IHRoaXMueTAgKyAodGhpcy5hICogZGxhdCk7XG4gIHJldHVybiBwO1xufVxuXG4vLyBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG5cbiAgdmFyIHggPSBwLng7XG4gIHZhciB5ID0gcC55O1xuXG4gIHAueCA9IGFkanVzdF9sb24odGhpcy5sb25nMCArICgoeCAtIHRoaXMueDApIC8gKHRoaXMuYSAqIHRoaXMucmMpKSk7XG4gIHAueSA9IGFkanVzdF9sYXQodGhpcy5sYXQwICsgKCh5IC0gdGhpcy55MCkgLyAodGhpcy5hKSkpO1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkVxdWlyZWN0YW5ndWxhclwiLCBcIkVxdWlkaXN0YW50X0N5bGluZHJpY2FsXCIsIFwiZXFjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgZTBmbiBmcm9tICcuLi9jb21tb24vZTBmbic7XG5pbXBvcnQgZTFmbiBmcm9tICcuLi9jb21tb24vZTFmbic7XG5pbXBvcnQgZTJmbiBmcm9tICcuLi9jb21tb24vZTJmbic7XG5pbXBvcnQgZTNmbiBmcm9tICcuLi9jb21tb24vZTNmbic7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgYWRqdXN0X2xhdCBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xhdCc7XG5pbXBvcnQgbWxmbiBmcm9tICcuLi9jb21tb24vbWxmbic7XG5pbXBvcnQge0VQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IGdOIGZyb20gJy4uL2NvbW1vbi9nTic7XG52YXIgTUFYX0lURVIgPSAyMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIC8qIFBsYWNlIHBhcmFtZXRlcnMgaW4gc3RhdGljIHN0b3JhZ2UgZm9yIGNvbW1vbiB1c2VcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuICB0aGlzLnRlbXAgPSB0aGlzLmIgLyB0aGlzLmE7XG4gIHRoaXMuZXMgPSAxIC0gTWF0aC5wb3codGhpcy50ZW1wLCAyKTsgLy8gZGV2YWl0IGV0cmUgZGFucyB0bWVyYy5qcyBtYWlzIG4geSBlc3QgcGFzIGRvbmMgamUgY29tbWVudGUgc2lub24gcmV0b3VyIGRlIHZhbGV1cnMgbnVsbGVzXG4gIHRoaXMuZSA9IE1hdGguc3FydCh0aGlzLmVzKTtcbiAgdGhpcy5lMCA9IGUwZm4odGhpcy5lcyk7XG4gIHRoaXMuZTEgPSBlMWZuKHRoaXMuZXMpO1xuICB0aGlzLmUyID0gZTJmbih0aGlzLmVzKTtcbiAgdGhpcy5lMyA9IGUzZm4odGhpcy5lcyk7XG4gIHRoaXMubWwwID0gdGhpcy5hICogbWxmbih0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzLCB0aGlzLmxhdDApOyAvL3NpIHF1ZSBkZXMgemVyb3MgbGUgY2FsY3VsIG5lIHNlIGZhaXQgcGFzXG59XG5cbi8qIFBvbHljb25pYyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICB2YXIgeCwgeSwgZWw7XG4gIHZhciBkbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgZWwgPSBkbG9uICogTWF0aC5zaW4obGF0KTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgaWYgKE1hdGguYWJzKGxhdCkgPD0gRVBTTE4pIHtcbiAgICAgIHggPSB0aGlzLmEgKiBkbG9uO1xuICAgICAgeSA9IC0xICogdGhpcy5hICogdGhpcy5sYXQwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHggPSB0aGlzLmEgKiBNYXRoLnNpbihlbCkgLyBNYXRoLnRhbihsYXQpO1xuICAgICAgeSA9IHRoaXMuYSAqIChhZGp1c3RfbGF0KGxhdCAtIHRoaXMubGF0MCkgKyAoMSAtIE1hdGguY29zKGVsKSkgLyBNYXRoLnRhbihsYXQpKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYgKE1hdGguYWJzKGxhdCkgPD0gRVBTTE4pIHtcbiAgICAgIHggPSB0aGlzLmEgKiBkbG9uO1xuICAgICAgeSA9IC0xICogdGhpcy5tbDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5sID0gZ04odGhpcy5hLCB0aGlzLmUsIE1hdGguc2luKGxhdCkpIC8gTWF0aC50YW4obGF0KTtcbiAgICAgIHggPSBubCAqIE1hdGguc2luKGVsKTtcbiAgICAgIHkgPSB0aGlzLmEgKiBtbGZuKHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMsIGxhdCkgLSB0aGlzLm1sMCArIG5sICogKDEgLSBNYXRoLmNvcyhlbCkpO1xuICAgIH1cblxuICB9XG4gIHAueCA9IHggKyB0aGlzLngwO1xuICBwLnkgPSB5ICsgdGhpcy55MDtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEludmVyc2UgZXF1YXRpb25zXG4gIC0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGxvbiwgbGF0LCB4LCB5LCBpO1xuICB2YXIgYWwsIGJsO1xuICB2YXIgcGhpLCBkcGhpO1xuICB4ID0gcC54IC0gdGhpcy54MDtcbiAgeSA9IHAueSAtIHRoaXMueTA7XG5cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgaWYgKE1hdGguYWJzKHkgKyB0aGlzLmEgKiB0aGlzLmxhdDApIDw9IEVQU0xOKSB7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHggLyB0aGlzLmEgKyB0aGlzLmxvbmcwKTtcbiAgICAgIGxhdCA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYWwgPSB0aGlzLmxhdDAgKyB5IC8gdGhpcy5hO1xuICAgICAgYmwgPSB4ICogeCAvIHRoaXMuYSAvIHRoaXMuYSArIGFsICogYWw7XG4gICAgICBwaGkgPSBhbDtcbiAgICAgIHZhciB0YW5waGk7XG4gICAgICBmb3IgKGkgPSBNQVhfSVRFUjsgaTsgLS1pKSB7XG4gICAgICAgIHRhbnBoaSA9IE1hdGgudGFuKHBoaSk7XG4gICAgICAgIGRwaGkgPSAtMSAqIChhbCAqIChwaGkgKiB0YW5waGkgKyAxKSAtIHBoaSAtIDAuNSAqIChwaGkgKiBwaGkgKyBibCkgKiB0YW5waGkpIC8gKChwaGkgLSBhbCkgLyB0YW5waGkgLSAxKTtcbiAgICAgICAgcGhpICs9IGRwaGk7XG4gICAgICAgIGlmIChNYXRoLmFicyhkcGhpKSA8PSBFUFNMTikge1xuICAgICAgICAgIGxhdCA9IHBoaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgKE1hdGguYXNpbih4ICogTWF0aC50YW4ocGhpKSAvIHRoaXMuYSkpIC8gTWF0aC5zaW4obGF0KSk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmIChNYXRoLmFicyh5ICsgdGhpcy5tbDApIDw9IEVQU0xOKSB7XG4gICAgICBsYXQgPSAwO1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgeCAvIHRoaXMuYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuXG4gICAgICBhbCA9ICh0aGlzLm1sMCArIHkpIC8gdGhpcy5hO1xuICAgICAgYmwgPSB4ICogeCAvIHRoaXMuYSAvIHRoaXMuYSArIGFsICogYWw7XG4gICAgICBwaGkgPSBhbDtcbiAgICAgIHZhciBjbCwgbWxuLCBtbG5wLCBtYTtcbiAgICAgIHZhciBjb247XG4gICAgICBmb3IgKGkgPSBNQVhfSVRFUjsgaTsgLS1pKSB7XG4gICAgICAgIGNvbiA9IHRoaXMuZSAqIE1hdGguc2luKHBoaSk7XG4gICAgICAgIGNsID0gTWF0aC5zcXJ0KDEgLSBjb24gKiBjb24pICogTWF0aC50YW4ocGhpKTtcbiAgICAgICAgbWxuID0gdGhpcy5hICogbWxmbih0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzLCBwaGkpO1xuICAgICAgICBtbG5wID0gdGhpcy5lMCAtIDIgKiB0aGlzLmUxICogTWF0aC5jb3MoMiAqIHBoaSkgKyA0ICogdGhpcy5lMiAqIE1hdGguY29zKDQgKiBwaGkpIC0gNiAqIHRoaXMuZTMgKiBNYXRoLmNvcyg2ICogcGhpKTtcbiAgICAgICAgbWEgPSBtbG4gLyB0aGlzLmE7XG4gICAgICAgIGRwaGkgPSAoYWwgKiAoY2wgKiBtYSArIDEpIC0gbWEgLSAwLjUgKiBjbCAqIChtYSAqIG1hICsgYmwpKSAvICh0aGlzLmVzICogTWF0aC5zaW4oMiAqIHBoaSkgKiAobWEgKiBtYSArIGJsIC0gMiAqIGFsICogbWEpIC8gKDQgKiBjbCkgKyAoYWwgLSBtYSkgKiAoY2wgKiBtbG5wIC0gMiAvIE1hdGguc2luKDIgKiBwaGkpKSAtIG1sbnApO1xuICAgICAgICBwaGkgLT0gZHBoaTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRwaGkpIDw9IEVQU0xOKSB7XG4gICAgICAgICAgbGF0ID0gcGhpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vbGF0PXBoaTR6KHRoaXMuZSx0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGFsLGJsLDAsMCk7XG4gICAgICBjbCA9IE1hdGguc3FydCgxIC0gdGhpcy5lcyAqIE1hdGgucG93KE1hdGguc2luKGxhdCksIDIpKSAqIE1hdGgudGFuKGxhdCk7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmFzaW4oeCAqIGNsIC8gdGhpcy5hKSAvIE1hdGguc2luKGxhdCkpO1xuICAgIH1cbiAgfVxuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIlBvbHljb25pY1wiLCBcInBvbHlcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCB7U0VDX1RPX1JBRH0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbi8qXG4gIHJlZmVyZW5jZVxuICAgIERlcGFydG1lbnQgb2YgTGFuZCBhbmQgU3VydmV5IFRlY2huaWNhbCBDaXJjdWxhciAxOTczLzMyXG4gICAgICBodHRwOi8vd3d3LmxpbnouZ292dC5uei9kb2NzL21pc2NlbGxhbmVvdXMvbnotbWFwLWRlZmluaXRpb24ucGRmXG4gICAgT1NHIFRlY2huaWNhbCBSZXBvcnQgNC4xXG4gICAgICBodHRwOi8vd3d3LmxpbnouZ292dC5uei9kb2NzL21pc2NlbGxhbmVvdXMvbnptZy5wZGZcbiAgKi9cblxuLyoqXG4gKiBpdGVyYXRpb25zOiBOdW1iZXIgb2YgaXRlcmF0aW9ucyB0byByZWZpbmUgaW52ZXJzZSB0cmFuc2Zvcm0uXG4gKiAgICAgMCAtPiBrbSBhY2N1cmFjeVxuICogICAgIDEgLT4gbSBhY2N1cmFjeSAtLSBzdWl0YWJsZSBmb3IgbW9zdCBtYXBwaW5nIGFwcGxpY2F0aW9uc1xuICogICAgIDIgLT4gbW0gYWNjdXJhY3lcbiAqL1xuZXhwb3J0IHZhciBpdGVyYXRpb25zID0gMTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHRoaXMuQSA9IFtdO1xuICB0aGlzLkFbMV0gPSAwLjYzOTkxNzUwNzM7XG4gIHRoaXMuQVsyXSA9IC0wLjEzNTg3OTc2MTM7XG4gIHRoaXMuQVszXSA9IDAuMDYzMjk0NDA5O1xuICB0aGlzLkFbNF0gPSAtMC4wMjUyNjg1MztcbiAgdGhpcy5BWzVdID0gMC4wMTE3ODc5O1xuICB0aGlzLkFbNl0gPSAtMC4wMDU1MTYxO1xuICB0aGlzLkFbN10gPSAwLjAwMjY5MDY7XG4gIHRoaXMuQVs4XSA9IC0wLjAwMTMzMztcbiAgdGhpcy5BWzldID0gMC4wMDA2NztcbiAgdGhpcy5BWzEwXSA9IC0wLjAwMDM0O1xuXG4gIHRoaXMuQl9yZSA9IFtdO1xuICB0aGlzLkJfaW0gPSBbXTtcbiAgdGhpcy5CX3JlWzFdID0gMC43NTU3ODUzMjI4O1xuICB0aGlzLkJfaW1bMV0gPSAwO1xuICB0aGlzLkJfcmVbMl0gPSAwLjI0OTIwNDY0NjtcbiAgdGhpcy5CX2ltWzJdID0gMC4wMDMzNzE1MDc7XG4gIHRoaXMuQl9yZVszXSA9IC0wLjAwMTU0MTczOTtcbiAgdGhpcy5CX2ltWzNdID0gMC4wNDEwNTg1NjA7XG4gIHRoaXMuQl9yZVs0XSA9IC0wLjEwMTYyOTA3O1xuICB0aGlzLkJfaW1bNF0gPSAwLjAxNzI3NjA5O1xuICB0aGlzLkJfcmVbNV0gPSAtMC4yNjYyMzQ4OTtcbiAgdGhpcy5CX2ltWzVdID0gLTAuMzYyNDkyMTg7XG4gIHRoaXMuQl9yZVs2XSA9IC0wLjY4NzA5ODM7XG4gIHRoaXMuQl9pbVs2XSA9IC0xLjE2NTE5Njc7XG5cbiAgdGhpcy5DX3JlID0gW107XG4gIHRoaXMuQ19pbSA9IFtdO1xuICB0aGlzLkNfcmVbMV0gPSAxLjMyMzEyNzA0Mzk7XG4gIHRoaXMuQ19pbVsxXSA9IDA7XG4gIHRoaXMuQ19yZVsyXSA9IC0wLjU3NzI0NTc4OTtcbiAgdGhpcy5DX2ltWzJdID0gLTAuMDA3ODA5NTk4O1xuICB0aGlzLkNfcmVbM10gPSAwLjUwODMwNzUxMztcbiAgdGhpcy5DX2ltWzNdID0gLTAuMTEyMjA4OTUyO1xuICB0aGlzLkNfcmVbNF0gPSAtMC4xNTA5NDc2MjtcbiAgdGhpcy5DX2ltWzRdID0gMC4xODIwMDYwMjtcbiAgdGhpcy5DX3JlWzVdID0gMS4wMTQxODE3OTtcbiAgdGhpcy5DX2ltWzVdID0gMS42NDQ5NzY5NjtcbiAgdGhpcy5DX3JlWzZdID0gMS45NjYwNTQ5O1xuICB0aGlzLkNfaW1bNl0gPSAyLjUxMjc2NDU7XG5cbiAgdGhpcy5EID0gW107XG4gIHRoaXMuRFsxXSA9IDEuNTYyNzAxNDI0MztcbiAgdGhpcy5EWzJdID0gMC41MTg1NDA2Mzk4O1xuICB0aGlzLkRbM10gPSAtMC4wMzMzMzA5ODtcbiAgdGhpcy5EWzRdID0gLTAuMTA1MjkwNjtcbiAgdGhpcy5EWzVdID0gLTAuMDM2ODU5NDtcbiAgdGhpcy5EWzZdID0gMC4wMDczMTc7XG4gIHRoaXMuRFs3XSA9IDAuMDEyMjA7XG4gIHRoaXMuRFs4XSA9IDAuMDAzOTQ7XG4gIHRoaXMuRFs5XSA9IC0wLjAwMTM7XG59XG5cbi8qKlxuICAgIE5ldyBaZWFsYW5kIE1hcCBHcmlkIEZvcndhcmQgIC0gbG9uZy9sYXQgdG8geC95XG4gICAgbG9uZy9sYXQgaW4gcmFkaWFuc1xuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbjtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICB2YXIgZGVsdGFfbGF0ID0gbGF0IC0gdGhpcy5sYXQwO1xuICB2YXIgZGVsdGFfbG9uID0gbG9uIC0gdGhpcy5sb25nMDtcblxuICAvLyAxLiBDYWxjdWxhdGUgZF9waGkgYW5kIGRfcHNpICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRfbGFtYmRhXG4gIC8vIEZvciB0aGlzIGFsZ29yaXRobSwgZGVsdGFfbGF0aXR1ZGUgaXMgaW4gc2Vjb25kcyBvZiBhcmMgeCAxMC01LCBzbyB3ZSBuZWVkIHRvIHNjYWxlIHRvIHRob3NlIHVuaXRzLiBMb25naXR1ZGUgaXMgcmFkaWFucy5cbiAgdmFyIGRfcGhpID0gZGVsdGFfbGF0IC8gU0VDX1RPX1JBRCAqIDFFLTU7XG4gIHZhciBkX2xhbWJkYSA9IGRlbHRhX2xvbjtcbiAgdmFyIGRfcGhpX24gPSAxOyAvLyBkX3BoaV4wXG5cbiAgdmFyIGRfcHNpID0gMDtcbiAgZm9yIChuID0gMTsgbiA8PSAxMDsgbisrKSB7XG4gICAgZF9waGlfbiA9IGRfcGhpX24gKiBkX3BoaTtcbiAgICBkX3BzaSA9IGRfcHNpICsgdGhpcy5BW25dICogZF9waGlfbjtcbiAgfVxuXG4gIC8vIDIuIENhbGN1bGF0ZSB0aGV0YVxuICB2YXIgdGhfcmUgPSBkX3BzaTtcbiAgdmFyIHRoX2ltID0gZF9sYW1iZGE7XG5cbiAgLy8gMy4gQ2FsY3VsYXRlIHpcbiAgdmFyIHRoX25fcmUgPSAxO1xuICB2YXIgdGhfbl9pbSA9IDA7IC8vIHRoZXRhXjBcbiAgdmFyIHRoX25fcmUxO1xuICB2YXIgdGhfbl9pbTE7XG5cbiAgdmFyIHpfcmUgPSAwO1xuICB2YXIgel9pbSA9IDA7XG4gIGZvciAobiA9IDE7IG4gPD0gNjsgbisrKSB7XG4gICAgdGhfbl9yZTEgPSB0aF9uX3JlICogdGhfcmUgLSB0aF9uX2ltICogdGhfaW07XG4gICAgdGhfbl9pbTEgPSB0aF9uX2ltICogdGhfcmUgKyB0aF9uX3JlICogdGhfaW07XG4gICAgdGhfbl9yZSA9IHRoX25fcmUxO1xuICAgIHRoX25faW0gPSB0aF9uX2ltMTtcbiAgICB6X3JlID0gel9yZSArIHRoaXMuQl9yZVtuXSAqIHRoX25fcmUgLSB0aGlzLkJfaW1bbl0gKiB0aF9uX2ltO1xuICAgIHpfaW0gPSB6X2ltICsgdGhpcy5CX2ltW25dICogdGhfbl9yZSArIHRoaXMuQl9yZVtuXSAqIHRoX25faW07XG4gIH1cblxuICAvLyA0LiBDYWxjdWxhdGUgZWFzdGluZyBhbmQgbm9ydGhpbmdcbiAgcC54ID0gKHpfaW0gKiB0aGlzLmEpICsgdGhpcy54MDtcbiAgcC55ID0gKHpfcmUgKiB0aGlzLmEpICsgdGhpcy55MDtcblxuICByZXR1cm4gcDtcbn1cblxuLyoqXG4gICAgTmV3IFplYWxhbmQgTWFwIEdyaWQgSW52ZXJzZSAgLSAgeC95IHRvIGxvbmcvbGF0XG4gICovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBuO1xuICB2YXIgeCA9IHAueDtcbiAgdmFyIHkgPSBwLnk7XG5cbiAgdmFyIGRlbHRhX3ggPSB4IC0gdGhpcy54MDtcbiAgdmFyIGRlbHRhX3kgPSB5IC0gdGhpcy55MDtcblxuICAvLyAxLiBDYWxjdWxhdGUgelxuICB2YXIgel9yZSA9IGRlbHRhX3kgLyB0aGlzLmE7XG4gIHZhciB6X2ltID0gZGVsdGFfeCAvIHRoaXMuYTtcblxuICAvLyAyYS4gQ2FsY3VsYXRlIHRoZXRhIC0gZmlyc3QgYXBwcm94aW1hdGlvbiBnaXZlcyBrbSBhY2N1cmFjeVxuICB2YXIgel9uX3JlID0gMTtcbiAgdmFyIHpfbl9pbSA9IDA7IC8vIHpeMFxuICB2YXIgel9uX3JlMTtcbiAgdmFyIHpfbl9pbTE7XG5cbiAgdmFyIHRoX3JlID0gMDtcbiAgdmFyIHRoX2ltID0gMDtcbiAgZm9yIChuID0gMTsgbiA8PSA2OyBuKyspIHtcbiAgICB6X25fcmUxID0gel9uX3JlICogel9yZSAtIHpfbl9pbSAqIHpfaW07XG4gICAgel9uX2ltMSA9IHpfbl9pbSAqIHpfcmUgKyB6X25fcmUgKiB6X2ltO1xuICAgIHpfbl9yZSA9IHpfbl9yZTE7XG4gICAgel9uX2ltID0gel9uX2ltMTtcbiAgICB0aF9yZSA9IHRoX3JlICsgdGhpcy5DX3JlW25dICogel9uX3JlIC0gdGhpcy5DX2ltW25dICogel9uX2ltO1xuICAgIHRoX2ltID0gdGhfaW0gKyB0aGlzLkNfaW1bbl0gKiB6X25fcmUgKyB0aGlzLkNfcmVbbl0gKiB6X25faW07XG4gIH1cblxuICAvLyAyYi4gSXRlcmF0ZSB0byByZWZpbmUgdGhlIGFjY3VyYWN5IG9mIHRoZSBjYWxjdWxhdGlvblxuICAvLyAgICAgICAgMCBpdGVyYXRpb25zIGdpdmVzIGttIGFjY3VyYWN5XG4gIC8vICAgICAgICAxIGl0ZXJhdGlvbiBnaXZlcyBtIGFjY3VyYWN5IC0tIGdvb2QgZW5vdWdoIGZvciBtb3N0IG1hcHBpbmcgYXBwbGljYXRpb25zXG4gIC8vICAgICAgICAyIGl0ZXJhdGlvbnMgYml2ZXMgbW0gYWNjdXJhY3lcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZXJhdGlvbnM7IGkrKykge1xuICAgIHZhciB0aF9uX3JlID0gdGhfcmU7XG4gICAgdmFyIHRoX25faW0gPSB0aF9pbTtcbiAgICB2YXIgdGhfbl9yZTE7XG4gICAgdmFyIHRoX25faW0xO1xuXG4gICAgdmFyIG51bV9yZSA9IHpfcmU7XG4gICAgdmFyIG51bV9pbSA9IHpfaW07XG4gICAgZm9yIChuID0gMjsgbiA8PSA2OyBuKyspIHtcbiAgICAgIHRoX25fcmUxID0gdGhfbl9yZSAqIHRoX3JlIC0gdGhfbl9pbSAqIHRoX2ltO1xuICAgICAgdGhfbl9pbTEgPSB0aF9uX2ltICogdGhfcmUgKyB0aF9uX3JlICogdGhfaW07XG4gICAgICB0aF9uX3JlID0gdGhfbl9yZTE7XG4gICAgICB0aF9uX2ltID0gdGhfbl9pbTE7XG4gICAgICBudW1fcmUgPSBudW1fcmUgKyAobiAtIDEpICogKHRoaXMuQl9yZVtuXSAqIHRoX25fcmUgLSB0aGlzLkJfaW1bbl0gKiB0aF9uX2ltKTtcbiAgICAgIG51bV9pbSA9IG51bV9pbSArIChuIC0gMSkgKiAodGhpcy5CX2ltW25dICogdGhfbl9yZSArIHRoaXMuQl9yZVtuXSAqIHRoX25faW0pO1xuICAgIH1cblxuICAgIHRoX25fcmUgPSAxO1xuICAgIHRoX25faW0gPSAwO1xuICAgIHZhciBkZW5fcmUgPSB0aGlzLkJfcmVbMV07XG4gICAgdmFyIGRlbl9pbSA9IHRoaXMuQl9pbVsxXTtcbiAgICBmb3IgKG4gPSAyOyBuIDw9IDY7IG4rKykge1xuICAgICAgdGhfbl9yZTEgPSB0aF9uX3JlICogdGhfcmUgLSB0aF9uX2ltICogdGhfaW07XG4gICAgICB0aF9uX2ltMSA9IHRoX25faW0gKiB0aF9yZSArIHRoX25fcmUgKiB0aF9pbTtcbiAgICAgIHRoX25fcmUgPSB0aF9uX3JlMTtcbiAgICAgIHRoX25faW0gPSB0aF9uX2ltMTtcbiAgICAgIGRlbl9yZSA9IGRlbl9yZSArIG4gKiAodGhpcy5CX3JlW25dICogdGhfbl9yZSAtIHRoaXMuQl9pbVtuXSAqIHRoX25faW0pO1xuICAgICAgZGVuX2ltID0gZGVuX2ltICsgbiAqICh0aGlzLkJfaW1bbl0gKiB0aF9uX3JlICsgdGhpcy5CX3JlW25dICogdGhfbl9pbSk7XG4gICAgfVxuXG4gICAgLy8gQ29tcGxleCBkaXZpc2lvblxuICAgIHZhciBkZW4yID0gZGVuX3JlICogZGVuX3JlICsgZGVuX2ltICogZGVuX2ltO1xuICAgIHRoX3JlID0gKG51bV9yZSAqIGRlbl9yZSArIG51bV9pbSAqIGRlbl9pbSkgLyBkZW4yO1xuICAgIHRoX2ltID0gKG51bV9pbSAqIGRlbl9yZSAtIG51bV9yZSAqIGRlbl9pbSkgLyBkZW4yO1xuICB9XG5cbiAgLy8gMy4gQ2FsY3VsYXRlIGRfcGhpICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZF9sYW1iZGFcbiAgdmFyIGRfcHNpID0gdGhfcmU7XG4gIHZhciBkX2xhbWJkYSA9IHRoX2ltO1xuICB2YXIgZF9wc2lfbiA9IDE7IC8vIGRfcHNpXjBcblxuICB2YXIgZF9waGkgPSAwO1xuICBmb3IgKG4gPSAxOyBuIDw9IDk7IG4rKykge1xuICAgIGRfcHNpX24gPSBkX3BzaV9uICogZF9wc2k7XG4gICAgZF9waGkgPSBkX3BoaSArIHRoaXMuRFtuXSAqIGRfcHNpX247XG4gIH1cblxuICAvLyA0LiBDYWxjdWxhdGUgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZVxuICAvLyBkX3BoaSBpcyBjYWxjdWF0ZWQgaW4gc2Vjb25kIG9mIGFyYyAqIDEwXi01LCBzbyB3ZSBuZWVkIHRvIHNjYWxlIGJhY2sgdG8gcmFkaWFucy4gZF9sYW1iZGEgaXMgaW4gcmFkaWFucy5cbiAgdmFyIGxhdCA9IHRoaXMubGF0MCArIChkX3BoaSAqIFNFQ19UT19SQUQgKiAxRTUpO1xuICB2YXIgbG9uID0gdGhpcy5sb25nMCArIGRfbGFtYmRhO1xuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuXG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiTmV3X1plYWxhbmRfTWFwX0dyaWRcIiwgXCJuem1nXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbi8qXG4gIHJlZmVyZW5jZVxuICAgIFwiTmV3IEVxdWFsLUFyZWEgTWFwIFByb2plY3Rpb25zIGZvciBOb25jaXJjdWxhciBSZWdpb25zXCIsIEpvaG4gUC4gU255ZGVyLFxuICAgIFRoZSBBbWVyaWNhbiBDYXJ0b2dyYXBoZXIsIFZvbCAxNSwgTm8uIDQsIE9jdG9iZXIgMTk4OCwgcHAuIDM0MS0zNTUuXG4gICovXG5cblxuLyogSW5pdGlhbGl6ZSB0aGUgTWlsbGVyIEN5bGluZHJpY2FsIHByb2plY3Rpb25cbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgLy9uby1vcFxufVxuXG4vKiBNaWxsZXIgQ3lsaW5kcmljYWwgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICB2YXIgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiBkbG9uO1xuICB2YXIgeSA9IHRoaXMueTAgKyB0aGlzLmEgKiBNYXRoLmxvZyhNYXRoLnRhbigoTWF0aC5QSSAvIDQpICsgKGxhdCAvIDIuNSkpKSAqIDEuMjU7XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIE1pbGxlciBDeWxpbmRyaWNhbCBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICBwLnggLT0gdGhpcy54MDtcbiAgcC55IC09IHRoaXMueTA7XG5cbiAgdmFyIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIHAueCAvIHRoaXMuYSk7XG4gIHZhciBsYXQgPSAyLjUgKiAoTWF0aC5hdGFuKE1hdGguZXhwKDAuOCAqIHAueSAvIHRoaXMuYSkpIC0gTWF0aC5QSSAvIDQpO1xuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIk1pbGxlcl9DeWxpbmRyaWNhbFwiLCBcIm1pbGxcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBhZGp1c3RfbGF0IGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbGF0JztcbmltcG9ydCBwal9lbmZuIGZyb20gJy4uL2NvbW1vbi9wal9lbmZuJztcbnZhciBNQVhfSVRFUiA9IDIwO1xuaW1wb3J0IHBqX21sZm4gZnJvbSAnLi4vY29tbW9uL3BqX21sZm4nO1xuaW1wb3J0IHBqX2ludl9tbGZuIGZyb20gJy4uL2NvbW1vbi9wal9pbnZfbWxmbic7XG5pbXBvcnQge0VQU0xOLCBIQUxGX1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IGFzaW56IGZyb20gJy4uL2NvbW1vbi9hc2lueic7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIC8qIFBsYWNlIHBhcmFtZXRlcnMgaW4gc3RhdGljIHN0b3JhZ2UgZm9yIGNvbW1vbiB1c2VcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXG4gIGlmICghdGhpcy5zcGhlcmUpIHtcbiAgICB0aGlzLmVuID0gcGpfZW5mbih0aGlzLmVzKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLm4gPSAxO1xuICAgIHRoaXMubSA9IDA7XG4gICAgdGhpcy5lcyA9IDA7XG4gICAgdGhpcy5DX3kgPSBNYXRoLnNxcnQoKHRoaXMubSArIDEpIC8gdGhpcy5uKTtcbiAgICB0aGlzLkNfeCA9IHRoaXMuQ195IC8gKHRoaXMubSArIDEpO1xuICB9XG5cbn1cblxuLyogU2ludXNvaWRhbCBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgeCwgeTtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG5cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgaWYgKCF0aGlzLm0pIHtcbiAgICAgIGxhdCA9IHRoaXMubiAhPT0gMSA/IE1hdGguYXNpbih0aGlzLm4gKiBNYXRoLnNpbihsYXQpKSA6IGxhdDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgayA9IHRoaXMubiAqIE1hdGguc2luKGxhdCk7XG4gICAgICBmb3IgKHZhciBpID0gTUFYX0lURVI7IGk7IC0taSkge1xuICAgICAgICB2YXIgViA9ICh0aGlzLm0gKiBsYXQgKyBNYXRoLnNpbihsYXQpIC0gaykgLyAodGhpcy5tICsgTWF0aC5jb3MobGF0KSk7XG4gICAgICAgIGxhdCAtPSBWO1xuICAgICAgICBpZiAoTWF0aC5hYnMoVikgPCBFUFNMTikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHggPSB0aGlzLmEgKiB0aGlzLkNfeCAqIGxvbiAqICh0aGlzLm0gKyBNYXRoLmNvcyhsYXQpKTtcbiAgICB5ID0gdGhpcy5hICogdGhpcy5DX3kgKiBsYXQ7XG5cbiAgfVxuICBlbHNlIHtcblxuICAgIHZhciBzID0gTWF0aC5zaW4obGF0KTtcbiAgICB2YXIgYyA9IE1hdGguY29zKGxhdCk7XG4gICAgeSA9IHRoaXMuYSAqIHBqX21sZm4obGF0LCBzLCBjLCB0aGlzLmVuKTtcbiAgICB4ID0gdGhpcy5hICogbG9uICogYyAvIE1hdGguc3FydCgxIC0gdGhpcy5lcyAqIHMgKiBzKTtcbiAgfVxuXG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBsYXQsIHRlbXAsIGxvbiwgcztcblxuICBwLnggLT0gdGhpcy54MDtcbiAgbG9uID0gcC54IC8gdGhpcy5hO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgbGF0ID0gcC55IC8gdGhpcy5hO1xuXG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIGxhdCAvPSB0aGlzLkNfeTtcbiAgICBsb24gPSBsb24gLyAodGhpcy5DX3ggKiAodGhpcy5tICsgTWF0aC5jb3MobGF0KSkpO1xuICAgIGlmICh0aGlzLm0pIHtcbiAgICAgIGxhdCA9IGFzaW56KCh0aGlzLm0gKiBsYXQgKyBNYXRoLnNpbihsYXQpKSAvIHRoaXMubik7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubiAhPT0gMSkge1xuICAgICAgbGF0ID0gYXNpbnooTWF0aC5zaW4obGF0KSAvIHRoaXMubik7XG4gICAgfVxuICAgIGxvbiA9IGFkanVzdF9sb24obG9uICsgdGhpcy5sb25nMCk7XG4gICAgbGF0ID0gYWRqdXN0X2xhdChsYXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIGxhdCA9IHBqX2ludl9tbGZuKHAueSAvIHRoaXMuYSwgdGhpcy5lcywgdGhpcy5lbik7XG4gICAgcyA9IE1hdGguYWJzKGxhdCk7XG4gICAgaWYgKHMgPCBIQUxGX1BJKSB7XG4gICAgICBzID0gTWF0aC5zaW4obGF0KTtcbiAgICAgIHRlbXAgPSB0aGlzLmxvbmcwICsgcC54ICogTWF0aC5zcXJ0KDEgLSB0aGlzLmVzICogcyAqIHMpIC8gKHRoaXMuYSAqIE1hdGguY29zKGxhdCkpO1xuICAgICAgLy90ZW1wID0gdGhpcy5sb25nMCArIHAueCAvICh0aGlzLmEgKiBNYXRoLmNvcyhsYXQpKTtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGVtcCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKChzIC0gRVBTTE4pIDwgSEFMRl9QSSkge1xuICAgICAgbG9uID0gdGhpcy5sb25nMDtcbiAgICB9XG4gIH1cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiU2ludXNvaWRhbFwiLCBcInNpbnVcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge31cbmltcG9ydCB7RVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuLyogTW9sbHdlaWRlIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuXG4gIC8qIEZvcndhcmQgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG5cbiAgdmFyIGRlbHRhX2xvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciB0aGV0YSA9IGxhdDtcbiAgdmFyIGNvbiA9IE1hdGguUEkgKiBNYXRoLnNpbihsYXQpO1xuXG4gIC8qIEl0ZXJhdGUgdXNpbmcgdGhlIE5ld3Rvbi1SYXBoc29uIG1ldGhvZCB0byBmaW5kIHRoZXRhXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIGRlbHRhX3RoZXRhID0gLSh0aGV0YSArIE1hdGguc2luKHRoZXRhKSAtIGNvbikgLyAoMSArIE1hdGguY29zKHRoZXRhKSk7XG4gICAgdGhldGEgKz0gZGVsdGFfdGhldGE7XG4gICAgaWYgKE1hdGguYWJzKGRlbHRhX3RoZXRhKSA8IEVQU0xOKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdGhldGEgLz0gMjtcblxuICAvKiBJZiB0aGUgbGF0aXR1ZGUgaXMgOTAgZGVnLCBmb3JjZSB0aGUgeCBjb29yZGluYXRlIHRvIGJlIFwiMCArIGZhbHNlIGVhc3RpbmdcIlxuICAgICAgIHRoaXMgaXMgZG9uZSBoZXJlIGJlY2F1c2Ugb2YgcHJlY2lzaW9uIHByb2JsZW1zIHdpdGggXCJjb3ModGhldGEpXCJcbiAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIGlmIChNYXRoLlBJIC8gMiAtIE1hdGguYWJzKGxhdCkgPCBFUFNMTikge1xuICAgIGRlbHRhX2xvbiA9IDA7XG4gIH1cbiAgdmFyIHggPSAwLjkwMDMxNjMxNjE1OCAqIHRoaXMuYSAqIGRlbHRhX2xvbiAqIE1hdGguY29zKHRoZXRhKSArIHRoaXMueDA7XG4gIHZhciB5ID0gMS40MTQyMTM1NjIzNzMxICogdGhpcy5hICogTWF0aC5zaW4odGhldGEpICsgdGhpcy55MDtcblxuICBwLnggPSB4O1xuICBwLnkgPSB5O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgdGhldGE7XG4gIHZhciBhcmc7XG5cbiAgLyogSW52ZXJzZSBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICBhcmcgPSBwLnkgLyAoMS40MTQyMTM1NjIzNzMxICogdGhpcy5hKTtcblxuICAvKiBCZWNhdXNlIG9mIGRpdmlzaW9uIGJ5IHplcm8gcHJvYmxlbXMsICdhcmcnIGNhbiBub3QgYmUgMS4gIFRoZXJlZm9yZVxuICAgICAgIGEgbnVtYmVyIHZlcnkgY2xvc2UgdG8gb25lIGlzIHVzZWQgaW5zdGVhZC5cbiAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgaWYgKE1hdGguYWJzKGFyZykgPiAwLjk5OTk5OTk5OTk5OSkge1xuICAgIGFyZyA9IDAuOTk5OTk5OTk5OTk5O1xuICB9XG4gIHRoZXRhID0gTWF0aC5hc2luKGFyZyk7XG4gIHZhciBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyAocC54IC8gKDAuOTAwMzE2MzE2MTU4ICogdGhpcy5hICogTWF0aC5jb3ModGhldGEpKSkpO1xuICBpZiAobG9uIDwgKC1NYXRoLlBJKSkge1xuICAgIGxvbiA9IC1NYXRoLlBJO1xuICB9XG4gIGlmIChsb24gPiBNYXRoLlBJKSB7XG4gICAgbG9uID0gTWF0aC5QSTtcbiAgfVxuICBhcmcgPSAoMiAqIHRoZXRhICsgTWF0aC5zaW4oMiAqIHRoZXRhKSkgLyBNYXRoLlBJO1xuICBpZiAoTWF0aC5hYnMoYXJnKSA+IDEpIHtcbiAgICBhcmcgPSAxO1xuICB9XG4gIHZhciBsYXQgPSBNYXRoLmFzaW4oYXJnKTtcblxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJNb2xsd2VpZGVcIiwgXCJtb2xsXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgZTBmbiBmcm9tICcuLi9jb21tb24vZTBmbic7XG5pbXBvcnQgZTFmbiBmcm9tICcuLi9jb21tb24vZTFmbic7XG5pbXBvcnQgZTJmbiBmcm9tICcuLi9jb21tb24vZTJmbic7XG5pbXBvcnQgZTNmbiBmcm9tICcuLi9jb21tb24vZTNmbic7XG5pbXBvcnQgbXNmbnogZnJvbSAnLi4vY29tbW9uL21zZm56JztcbmltcG9ydCBtbGZuIGZyb20gJy4uL2NvbW1vbi9tbGZuJztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBhZGp1c3RfbGF0IGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbGF0JztcbmltcG9ydCBpbWxmbiBmcm9tICcuLi9jb21tb24vaW1sZm4nO1xuaW1wb3J0IHtFUFNMTn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuXG4gIC8qIFBsYWNlIHBhcmFtZXRlcnMgaW4gc3RhdGljIHN0b3JhZ2UgZm9yIGNvbW1vbiB1c2VcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuICAvLyBTdGFuZGFyZCBQYXJhbGxlbHMgY2Fubm90IGJlIGVxdWFsIGFuZCBvbiBvcHBvc2l0ZSBzaWRlcyBvZiB0aGUgZXF1YXRvclxuICBpZiAoTWF0aC5hYnModGhpcy5sYXQxICsgdGhpcy5sYXQyKSA8IEVQU0xOKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubGF0MiA9IHRoaXMubGF0MiB8fCB0aGlzLmxhdDE7XG4gIHRoaXMudGVtcCA9IHRoaXMuYiAvIHRoaXMuYTtcbiAgdGhpcy5lcyA9IDEgLSBNYXRoLnBvdyh0aGlzLnRlbXAsIDIpO1xuICB0aGlzLmUgPSBNYXRoLnNxcnQodGhpcy5lcyk7XG4gIHRoaXMuZTAgPSBlMGZuKHRoaXMuZXMpO1xuICB0aGlzLmUxID0gZTFmbih0aGlzLmVzKTtcbiAgdGhpcy5lMiA9IGUyZm4odGhpcy5lcyk7XG4gIHRoaXMuZTMgPSBlM2ZuKHRoaXMuZXMpO1xuXG4gIHRoaXMuc2lucGhpID0gTWF0aC5zaW4odGhpcy5sYXQxKTtcbiAgdGhpcy5jb3NwaGkgPSBNYXRoLmNvcyh0aGlzLmxhdDEpO1xuXG4gIHRoaXMubXMxID0gbXNmbnoodGhpcy5lLCB0aGlzLnNpbnBoaSwgdGhpcy5jb3NwaGkpO1xuICB0aGlzLm1sMSA9IG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgdGhpcy5sYXQxKTtcblxuICBpZiAoTWF0aC5hYnModGhpcy5sYXQxIC0gdGhpcy5sYXQyKSA8IEVQU0xOKSB7XG4gICAgdGhpcy5ucyA9IHRoaXMuc2lucGhpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuc2lucGhpID0gTWF0aC5zaW4odGhpcy5sYXQyKTtcbiAgICB0aGlzLmNvc3BoaSA9IE1hdGguY29zKHRoaXMubGF0Mik7XG4gICAgdGhpcy5tczIgPSBtc2Zueih0aGlzLmUsIHRoaXMuc2lucGhpLCB0aGlzLmNvc3BoaSk7XG4gICAgdGhpcy5tbDIgPSBtbGZuKHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMsIHRoaXMubGF0Mik7XG4gICAgdGhpcy5ucyA9ICh0aGlzLm1zMSAtIHRoaXMubXMyKSAvICh0aGlzLm1sMiAtIHRoaXMubWwxKTtcbiAgfVxuICB0aGlzLmcgPSB0aGlzLm1sMSArIHRoaXMubXMxIC8gdGhpcy5ucztcbiAgdGhpcy5tbDAgPSBtbGZuKHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMsIHRoaXMubGF0MCk7XG4gIHRoaXMucmggPSB0aGlzLmEgKiAodGhpcy5nIC0gdGhpcy5tbDApO1xufVxuXG4vKiBFcXVpZGlzdGFudCBDb25pYyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICB2YXIgcmgxO1xuXG4gIC8qIEZvcndhcmQgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIHJoMSA9IHRoaXMuYSAqICh0aGlzLmcgLSBsYXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBtbCA9IG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgbGF0KTtcbiAgICByaDEgPSB0aGlzLmEgKiAodGhpcy5nIC0gbWwpO1xuICB9XG4gIHZhciB0aGV0YSA9IHRoaXMubnMgKiBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICB2YXIgeCA9IHRoaXMueDAgKyByaDEgKiBNYXRoLnNpbih0aGV0YSk7XG4gIHZhciB5ID0gdGhpcy55MCArIHRoaXMucmggLSByaDEgKiBNYXRoLmNvcyh0aGV0YSk7XG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG4vKiBJbnZlcnNlIGVxdWF0aW9uc1xuICAtLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgPSB0aGlzLnJoIC0gcC55ICsgdGhpcy55MDtcbiAgdmFyIGNvbiwgcmgxLCBsYXQsIGxvbjtcbiAgaWYgKHRoaXMubnMgPj0gMCkge1xuICAgIHJoMSA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpO1xuICAgIGNvbiA9IDE7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmgxID0gLU1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpO1xuICAgIGNvbiA9IC0xO1xuICB9XG4gIHZhciB0aGV0YSA9IDA7XG4gIGlmIChyaDEgIT09IDApIHtcbiAgICB0aGV0YSA9IE1hdGguYXRhbjIoY29uICogcC54LCBjb24gKiBwLnkpO1xuICB9XG5cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgdGhldGEgLyB0aGlzLm5zKTtcbiAgICBsYXQgPSBhZGp1c3RfbGF0KHRoaXMuZyAtIHJoMSAvIHRoaXMuYSk7XG4gICAgcC54ID0gbG9uO1xuICAgIHAueSA9IGxhdDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgbWwgPSB0aGlzLmcgLSByaDEgLyB0aGlzLmE7XG4gICAgbGF0ID0gaW1sZm4obWwsIHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMpO1xuICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIHRoZXRhIC8gdGhpcy5ucyk7XG4gICAgcC54ID0gbG9uO1xuICAgIHAueSA9IGxhdDtcbiAgICByZXR1cm4gcDtcbiAgfVxuXG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJFcXVpZGlzdGFudF9Db25pY1wiLCBcImVxZGNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcblxuaW1wb3J0IHtIQUxGX1BJLCBFUFNMTn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmltcG9ydCBhc2lueiBmcm9tICcuLi9jb21tb24vYXNpbnonO1xuXG4vKiBJbml0aWFsaXplIHRoZSBWYW4gRGVyIEdyaW50ZW4gcHJvamVjdGlvblxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAvL3RoaXMuUiA9IDYzNzA5OTc7IC8vUmFkaXVzIG9mIGVhcnRoXG4gIHRoaXMuUiA9IHRoaXMuYTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuXG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG5cbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHZhciBkbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgdmFyIHgsIHk7XG5cbiAgaWYgKE1hdGguYWJzKGxhdCkgPD0gRVBTTE4pIHtcbiAgICB4ID0gdGhpcy54MCArIHRoaXMuUiAqIGRsb247XG4gICAgeSA9IHRoaXMueTA7XG4gIH1cbiAgdmFyIHRoZXRhID0gYXNpbnooMiAqIE1hdGguYWJzKGxhdCAvIE1hdGguUEkpKTtcbiAgaWYgKChNYXRoLmFicyhkbG9uKSA8PSBFUFNMTikgfHwgKE1hdGguYWJzKE1hdGguYWJzKGxhdCkgLSBIQUxGX1BJKSA8PSBFUFNMTikpIHtcbiAgICB4ID0gdGhpcy54MDtcbiAgICBpZiAobGF0ID49IDApIHtcbiAgICAgIHkgPSB0aGlzLnkwICsgTWF0aC5QSSAqIHRoaXMuUiAqIE1hdGgudGFuKDAuNSAqIHRoZXRhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB5ID0gdGhpcy55MCArIE1hdGguUEkgKiB0aGlzLlIgKiAtTWF0aC50YW4oMC41ICogdGhldGEpO1xuICAgIH1cbiAgICAvLyAgcmV0dXJuKE9LKTtcbiAgfVxuICB2YXIgYWwgPSAwLjUgKiBNYXRoLmFicygoTWF0aC5QSSAvIGRsb24pIC0gKGRsb24gLyBNYXRoLlBJKSk7XG4gIHZhciBhc3EgPSBhbCAqIGFsO1xuICB2YXIgc2ludGggPSBNYXRoLnNpbih0aGV0YSk7XG4gIHZhciBjb3N0aCA9IE1hdGguY29zKHRoZXRhKTtcblxuICB2YXIgZyA9IGNvc3RoIC8gKHNpbnRoICsgY29zdGggLSAxKTtcbiAgdmFyIGdzcSA9IGcgKiBnO1xuICB2YXIgbSA9IGcgKiAoMiAvIHNpbnRoIC0gMSk7XG4gIHZhciBtc3EgPSBtICogbTtcbiAgdmFyIGNvbiA9IE1hdGguUEkgKiB0aGlzLlIgKiAoYWwgKiAoZyAtIG1zcSkgKyBNYXRoLnNxcnQoYXNxICogKGcgLSBtc3EpICogKGcgLSBtc3EpIC0gKG1zcSArIGFzcSkgKiAoZ3NxIC0gbXNxKSkpIC8gKG1zcSArIGFzcSk7XG4gIGlmIChkbG9uIDwgMCkge1xuICAgIGNvbiA9IC1jb247XG4gIH1cbiAgeCA9IHRoaXMueDAgKyBjb247XG4gIC8vY29uID0gTWF0aC5hYnMoY29uIC8gKE1hdGguUEkgKiB0aGlzLlIpKTtcbiAgdmFyIHEgPSBhc3EgKyBnO1xuICBjb24gPSBNYXRoLlBJICogdGhpcy5SICogKG0gKiBxIC0gYWwgKiBNYXRoLnNxcnQoKG1zcSArIGFzcSkgKiAoYXNxICsgMSkgLSBxICogcSkpIC8gKG1zcSArIGFzcSk7XG4gIGlmIChsYXQgPj0gMCkge1xuICAgIC8veSA9IHRoaXMueTAgKyBNYXRoLlBJICogdGhpcy5SICogTWF0aC5zcXJ0KDEgLSBjb24gKiBjb24gLSAyICogYWwgKiBjb24pO1xuICAgIHkgPSB0aGlzLnkwICsgY29uO1xuICB9XG4gIGVsc2Uge1xuICAgIC8veSA9IHRoaXMueTAgLSBNYXRoLlBJICogdGhpcy5SICogTWF0aC5zcXJ0KDEgLSBjb24gKiBjb24gLSAyICogYWwgKiBjb24pO1xuICAgIHkgPSB0aGlzLnkwIC0gY29uO1xuICB9XG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG4vKiBWYW4gRGVyIEdyaW50ZW4gaW52ZXJzZSBlcXVhdGlvbnMtLW1hcHBpbmcgeCx5IHRvIGxhdC9sb25nXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBsb24sIGxhdDtcbiAgdmFyIHh4LCB5eSwgeHlzLCBjMSwgYzIsIGMzO1xuICB2YXIgYTE7XG4gIHZhciBtMTtcbiAgdmFyIGNvbjtcbiAgdmFyIHRoMTtcbiAgdmFyIGQ7XG5cbiAgLyogaW52ZXJzZSBlcXVhdGlvbnNcbiAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgY29uID0gTWF0aC5QSSAqIHRoaXMuUjtcbiAgeHggPSBwLnggLyBjb247XG4gIHl5ID0gcC55IC8gY29uO1xuICB4eXMgPSB4eCAqIHh4ICsgeXkgKiB5eTtcbiAgYzEgPSAtTWF0aC5hYnMoeXkpICogKDEgKyB4eXMpO1xuICBjMiA9IGMxIC0gMiAqIHl5ICogeXkgKyB4eCAqIHh4O1xuICBjMyA9IC0yICogYzEgKyAxICsgMiAqIHl5ICogeXkgKyB4eXMgKiB4eXM7XG4gIGQgPSB5eSAqIHl5IC8gYzMgKyAoMiAqIGMyICogYzIgKiBjMiAvIGMzIC8gYzMgLyBjMyAtIDkgKiBjMSAqIGMyIC8gYzMgLyBjMykgLyAyNztcbiAgYTEgPSAoYzEgLSBjMiAqIGMyIC8gMyAvIGMzKSAvIGMzO1xuICBtMSA9IDIgKiBNYXRoLnNxcnQoLWExIC8gMyk7XG4gIGNvbiA9ICgoMyAqIGQpIC8gYTEpIC8gbTE7XG4gIGlmIChNYXRoLmFicyhjb24pID4gMSkge1xuICAgIGlmIChjb24gPj0gMCkge1xuICAgICAgY29uID0gMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb24gPSAtMTtcbiAgICB9XG4gIH1cbiAgdGgxID0gTWF0aC5hY29zKGNvbikgLyAzO1xuICBpZiAocC55ID49IDApIHtcbiAgICBsYXQgPSAoLW0xICogTWF0aC5jb3ModGgxICsgTWF0aC5QSSAvIDMpIC0gYzIgLyAzIC8gYzMpICogTWF0aC5QSTtcbiAgfVxuICBlbHNlIHtcbiAgICBsYXQgPSAtKC1tMSAqIE1hdGguY29zKHRoMSArIE1hdGguUEkgLyAzKSAtIGMyIC8gMyAvIGMzKSAqIE1hdGguUEk7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoeHgpIDwgRVBTTE4pIHtcbiAgICBsb24gPSB0aGlzLmxvbmcwO1xuICB9XG4gIGVsc2Uge1xuICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguUEkgKiAoeHlzIC0gMSArIE1hdGguc3FydCgxICsgMiAqICh4eCAqIHh4IC0geXkgKiB5eSkgKyB4eXMgKiB4eXMpKSAvIDIgLyB4eCk7XG4gIH1cblxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJWYW5fZGVyX0dyaW50ZW5fSVwiLCBcIlZhbkRlckdyaW50ZW5cIiwgXCJ2YW5kZ1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IHtIQUxGX1BJLCBFUFNMTn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmltcG9ydCBtbGZuIGZyb20gJy4uL2NvbW1vbi9tbGZuJztcbmltcG9ydCBlMGZuIGZyb20gJy4uL2NvbW1vbi9lMGZuJztcbmltcG9ydCBlMWZuIGZyb20gJy4uL2NvbW1vbi9lMWZuJztcbmltcG9ydCBlMmZuIGZyb20gJy4uL2NvbW1vbi9lMmZuJztcbmltcG9ydCBlM2ZuIGZyb20gJy4uL2NvbW1vbi9lM2ZuJztcbmltcG9ydCBnTiBmcm9tICcuLi9jb21tb24vZ04nO1xuaW1wb3J0IGFzaW56IGZyb20gJy4uL2NvbW1vbi9hc2lueic7XG5pbXBvcnQgaW1sZm4gZnJvbSAnLi4vY29tbW9uL2ltbGZuJztcblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB0aGlzLnNpbl9wMTIgPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICB0aGlzLmNvc19wMTIgPSBNYXRoLmNvcyh0aGlzLmxhdDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciBzaW5waGkgPSBNYXRoLnNpbihwLnkpO1xuICB2YXIgY29zcGhpID0gTWF0aC5jb3MocC55KTtcbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICB2YXIgZTAsIGUxLCBlMiwgZTMsIE1scCwgTWwsIHRhbnBoaSwgTmwxLCBObCwgcHNpLCBBeiwgRywgSCwgR0gsIEhzLCBjLCBrcCwgY29zX2MsIHMsIHMyLCBzMywgczQsIHM1O1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAoTWF0aC5hYnModGhpcy5zaW5fcDEyIC0gMSkgPD0gRVBTTE4pIHtcbiAgICAgIC8vTm9ydGggUG9sZSBjYXNlXG4gICAgICBwLnggPSB0aGlzLngwICsgdGhpcy5hICogKEhBTEZfUEkgLSBsYXQpICogTWF0aC5zaW4oZGxvbik7XG4gICAgICBwLnkgPSB0aGlzLnkwIC0gdGhpcy5hICogKEhBTEZfUEkgLSBsYXQpICogTWF0aC5jb3MoZGxvbik7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5zaW5fcDEyICsgMSkgPD0gRVBTTE4pIHtcbiAgICAgIC8vU291dGggUG9sZSBjYXNlXG4gICAgICBwLnggPSB0aGlzLngwICsgdGhpcy5hICogKEhBTEZfUEkgKyBsYXQpICogTWF0aC5zaW4oZGxvbik7XG4gICAgICBwLnkgPSB0aGlzLnkwICsgdGhpcy5hICogKEhBTEZfUEkgKyBsYXQpICogTWF0aC5jb3MoZGxvbik7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvL2RlZmF1bHQgY2FzZVxuICAgICAgY29zX2MgPSB0aGlzLnNpbl9wMTIgKiBzaW5waGkgKyB0aGlzLmNvc19wMTIgKiBjb3NwaGkgKiBNYXRoLmNvcyhkbG9uKTtcbiAgICAgIGMgPSBNYXRoLmFjb3MoY29zX2MpO1xuICAgICAga3AgPSBjID8gYyAvIE1hdGguc2luKGMpIDogMTtcbiAgICAgIHAueCA9IHRoaXMueDAgKyB0aGlzLmEgKiBrcCAqIGNvc3BoaSAqIE1hdGguc2luKGRsb24pO1xuICAgICAgcC55ID0gdGhpcy55MCArIHRoaXMuYSAqIGtwICogKHRoaXMuY29zX3AxMiAqIHNpbnBoaSAtIHRoaXMuc2luX3AxMiAqIGNvc3BoaSAqIE1hdGguY29zKGRsb24pKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBlMCA9IGUwZm4odGhpcy5lcyk7XG4gICAgZTEgPSBlMWZuKHRoaXMuZXMpO1xuICAgIGUyID0gZTJmbih0aGlzLmVzKTtcbiAgICBlMyA9IGUzZm4odGhpcy5lcyk7XG4gICAgaWYgKE1hdGguYWJzKHRoaXMuc2luX3AxMiAtIDEpIDw9IEVQU0xOKSB7XG4gICAgICAvL05vcnRoIFBvbGUgY2FzZVxuICAgICAgTWxwID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgSEFMRl9QSSk7XG4gICAgICBNbCA9IHRoaXMuYSAqIG1sZm4oZTAsIGUxLCBlMiwgZTMsIGxhdCk7XG4gICAgICBwLnggPSB0aGlzLngwICsgKE1scCAtIE1sKSAqIE1hdGguc2luKGRsb24pO1xuICAgICAgcC55ID0gdGhpcy55MCAtIChNbHAgLSBNbCkgKiBNYXRoLmNvcyhkbG9uKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLnNpbl9wMTIgKyAxKSA8PSBFUFNMTikge1xuICAgICAgLy9Tb3V0aCBQb2xlIGNhc2VcbiAgICAgIE1scCA9IHRoaXMuYSAqIG1sZm4oZTAsIGUxLCBlMiwgZTMsIEhBTEZfUEkpO1xuICAgICAgTWwgPSB0aGlzLmEgKiBtbGZuKGUwLCBlMSwgZTIsIGUzLCBsYXQpO1xuICAgICAgcC54ID0gdGhpcy54MCArIChNbHAgKyBNbCkgKiBNYXRoLnNpbihkbG9uKTtcbiAgICAgIHAueSA9IHRoaXMueTAgKyAoTWxwICsgTWwpICogTWF0aC5jb3MoZGxvbik7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvL0RlZmF1bHQgY2FzZVxuICAgICAgdGFucGhpID0gc2lucGhpIC8gY29zcGhpO1xuICAgICAgTmwxID0gZ04odGhpcy5hLCB0aGlzLmUsIHRoaXMuc2luX3AxMik7XG4gICAgICBObCA9IGdOKHRoaXMuYSwgdGhpcy5lLCBzaW5waGkpO1xuICAgICAgcHNpID0gTWF0aC5hdGFuKCgxIC0gdGhpcy5lcykgKiB0YW5waGkgKyB0aGlzLmVzICogTmwxICogdGhpcy5zaW5fcDEyIC8gKE5sICogY29zcGhpKSk7XG4gICAgICBBeiA9IE1hdGguYXRhbjIoTWF0aC5zaW4oZGxvbiksIHRoaXMuY29zX3AxMiAqIE1hdGgudGFuKHBzaSkgLSB0aGlzLnNpbl9wMTIgKiBNYXRoLmNvcyhkbG9uKSk7XG4gICAgICBpZiAoQXogPT09IDApIHtcbiAgICAgICAgcyA9IE1hdGguYXNpbih0aGlzLmNvc19wMTIgKiBNYXRoLnNpbihwc2kpIC0gdGhpcy5zaW5fcDEyICogTWF0aC5jb3MocHNpKSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChNYXRoLmFicyhNYXRoLmFicyhBeikgLSBNYXRoLlBJKSA8PSBFUFNMTikge1xuICAgICAgICBzID0gLU1hdGguYXNpbih0aGlzLmNvc19wMTIgKiBNYXRoLnNpbihwc2kpIC0gdGhpcy5zaW5fcDEyICogTWF0aC5jb3MocHNpKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcyA9IE1hdGguYXNpbihNYXRoLnNpbihkbG9uKSAqIE1hdGguY29zKHBzaSkgLyBNYXRoLnNpbihBeikpO1xuICAgICAgfVxuICAgICAgRyA9IHRoaXMuZSAqIHRoaXMuc2luX3AxMiAvIE1hdGguc3FydCgxIC0gdGhpcy5lcyk7XG4gICAgICBIID0gdGhpcy5lICogdGhpcy5jb3NfcDEyICogTWF0aC5jb3MoQXopIC8gTWF0aC5zcXJ0KDEgLSB0aGlzLmVzKTtcbiAgICAgIEdIID0gRyAqIEg7XG4gICAgICBIcyA9IEggKiBIO1xuICAgICAgczIgPSBzICogcztcbiAgICAgIHMzID0gczIgKiBzO1xuICAgICAgczQgPSBzMyAqIHM7XG4gICAgICBzNSA9IHM0ICogcztcbiAgICAgIGMgPSBObDEgKiBzICogKDEgLSBzMiAqIEhzICogKDEgLSBIcykgLyA2ICsgczMgLyA4ICogR0ggKiAoMSAtIDIgKiBIcykgKyBzNCAvIDEyMCAqIChIcyAqICg0IC0gNyAqIEhzKSAtIDMgKiBHICogRyAqICgxIC0gNyAqIEhzKSkgLSBzNSAvIDQ4ICogR0gpO1xuICAgICAgcC54ID0gdGhpcy54MCArIGMgKiBNYXRoLnNpbihBeik7XG4gICAgICBwLnkgPSB0aGlzLnkwICsgYyAqIE1hdGguY29zKEF6KTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfVxuXG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICBwLnggLT0gdGhpcy54MDtcbiAgcC55IC09IHRoaXMueTA7XG4gIHZhciByaCwgeiwgc2lueiwgY29zeiwgbG9uLCBsYXQsIGNvbiwgZTAsIGUxLCBlMiwgZTMsIE1scCwgTSwgTjEsIHBzaSwgQXosIGNvc0F6LCB0bXAsIEEsIEIsIEQsIEVlLCBGLCBzaW5wc2k7XG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIHJoID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gICAgaWYgKHJoID4gKDIgKiBIQUxGX1BJICogdGhpcy5hKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB6ID0gcmggLyB0aGlzLmE7XG5cbiAgICBzaW56ID0gTWF0aC5zaW4oeik7XG4gICAgY29zeiA9IE1hdGguY29zKHopO1xuXG4gICAgbG9uID0gdGhpcy5sb25nMDtcbiAgICBpZiAoTWF0aC5hYnMocmgpIDw9IEVQU0xOKSB7XG4gICAgICBsYXQgPSB0aGlzLmxhdDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbGF0ID0gYXNpbnooY29zeiAqIHRoaXMuc2luX3AxMiArIChwLnkgKiBzaW56ICogdGhpcy5jb3NfcDEyKSAvIHJoKTtcbiAgICAgIGNvbiA9IE1hdGguYWJzKHRoaXMubGF0MCkgLSBIQUxGX1BJO1xuICAgICAgaWYgKE1hdGguYWJzKGNvbikgPD0gRVBTTE4pIHtcbiAgICAgICAgaWYgKHRoaXMubGF0MCA+PSAwKSB7XG4gICAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLngsIC0gcC55KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwIC0gTWF0aC5hdGFuMigtcC54LCBwLnkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8qY29uID0gY29zeiAtIHRoaXMuc2luX3AxMiAqIE1hdGguc2luKGxhdCk7XG4gICAgICAgIGlmICgoTWF0aC5hYnMoY29uKSA8IEVQU0xOKSAmJiAoTWF0aC5hYnMocC54KSA8IEVQU0xOKSkge1xuICAgICAgICAgIC8vbm8tb3AsIGp1c3Qga2VlcCB0aGUgbG9uIHZhbHVlIGFzIGlzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHRlbXAgPSBNYXRoLmF0YW4yKChwLnggKiBzaW56ICogdGhpcy5jb3NfcDEyKSwgKGNvbiAqIHJoKSk7XG4gICAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMigocC54ICogc2lueiAqIHRoaXMuY29zX3AxMiksIChjb24gKiByaCkpKTtcbiAgICAgICAgfSovXG4gICAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54ICogc2lueiwgcmggKiB0aGlzLmNvc19wMTIgKiBjb3N6IC0gcC55ICogdGhpcy5zaW5fcDEyICogc2lueikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHAueCA9IGxvbjtcbiAgICBwLnkgPSBsYXQ7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgZWxzZSB7XG4gICAgZTAgPSBlMGZuKHRoaXMuZXMpO1xuICAgIGUxID0gZTFmbih0aGlzLmVzKTtcbiAgICBlMiA9IGUyZm4odGhpcy5lcyk7XG4gICAgZTMgPSBlM2ZuKHRoaXMuZXMpO1xuICAgIGlmIChNYXRoLmFicyh0aGlzLnNpbl9wMTIgLSAxKSA8PSBFUFNMTikge1xuICAgICAgLy9Ob3J0aCBwb2xlIGNhc2VcbiAgICAgIE1scCA9IHRoaXMuYSAqIG1sZm4oZTAsIGUxLCBlMiwgZTMsIEhBTEZfUEkpO1xuICAgICAgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICAgIE0gPSBNbHAgLSByaDtcbiAgICAgIGxhdCA9IGltbGZuKE0gLyB0aGlzLmEsIGUwLCBlMSwgZTIsIGUzKTtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54LCAtIDEgKiBwLnkpKTtcbiAgICAgIHAueCA9IGxvbjtcbiAgICAgIHAueSA9IGxhdDtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLnNpbl9wMTIgKyAxKSA8PSBFUFNMTikge1xuICAgICAgLy9Tb3V0aCBwb2xlIGNhc2VcbiAgICAgIE1scCA9IHRoaXMuYSAqIG1sZm4oZTAsIGUxLCBlMiwgZTMsIEhBTEZfUEkpO1xuICAgICAgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICAgIE0gPSByaCAtIE1scDtcblxuICAgICAgbGF0ID0gaW1sZm4oTSAvIHRoaXMuYSwgZTAsIGUxLCBlMiwgZTMpO1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLngsIHAueSkpO1xuICAgICAgcC54ID0gbG9uO1xuICAgICAgcC55ID0gbGF0O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy9kZWZhdWx0IGNhc2VcbiAgICAgIHJoID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gICAgICBBeiA9IE1hdGguYXRhbjIocC54LCBwLnkpO1xuICAgICAgTjEgPSBnTih0aGlzLmEsIHRoaXMuZSwgdGhpcy5zaW5fcDEyKTtcbiAgICAgIGNvc0F6ID0gTWF0aC5jb3MoQXopO1xuICAgICAgdG1wID0gdGhpcy5lICogdGhpcy5jb3NfcDEyICogY29zQXo7XG4gICAgICBBID0gLXRtcCAqIHRtcCAvICgxIC0gdGhpcy5lcyk7XG4gICAgICBCID0gMyAqIHRoaXMuZXMgKiAoMSAtIEEpICogdGhpcy5zaW5fcDEyICogdGhpcy5jb3NfcDEyICogY29zQXogLyAoMSAtIHRoaXMuZXMpO1xuICAgICAgRCA9IHJoIC8gTjE7XG4gICAgICBFZSA9IEQgLSBBICogKDEgKyBBKSAqIE1hdGgucG93KEQsIDMpIC8gNiAtIEIgKiAoMSArIDMgKiBBKSAqIE1hdGgucG93KEQsIDQpIC8gMjQ7XG4gICAgICBGID0gMSAtIEEgKiBFZSAqIEVlIC8gMiAtIEQgKiBFZSAqIEVlICogRWUgLyA2O1xuICAgICAgcHNpID0gTWF0aC5hc2luKHRoaXMuc2luX3AxMiAqIE1hdGguY29zKEVlKSArIHRoaXMuY29zX3AxMiAqIE1hdGguc2luKEVlKSAqIGNvc0F6KTtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXNpbihNYXRoLnNpbihBeikgKiBNYXRoLnNpbihFZSkgLyBNYXRoLmNvcyhwc2kpKSk7XG4gICAgICBzaW5wc2kgPSBNYXRoLnNpbihwc2kpO1xuICAgICAgbGF0ID0gTWF0aC5hdGFuMigoc2lucHNpIC0gdGhpcy5lcyAqIEYgKiB0aGlzLnNpbl9wMTIpICogTWF0aC50YW4ocHNpKSwgc2lucHNpICogKDEgLSB0aGlzLmVzKSk7XG4gICAgICBwLnggPSBsb247XG4gICAgICBwLnkgPSBsYXQ7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiQXppbXV0aGFsX0VxdWlkaXN0YW50XCIsIFwiYWVxZFwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFzaW56IGZyb20gJy4uL2NvbW1vbi9hc2lueic7XG5pbXBvcnQge0VQU0xOLCBIQUxGX1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vZG91YmxlIHRlbXA7ICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlICAgICovXG5cbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIHRoaXMuc2luX3AxNCA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHRoaXMuY29zX3AxNCA9IE1hdGguY29zKHRoaXMubGF0MCk7XG59XG5cbi8qIE9ydGhvZ3JhcGhpYyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgc2lucGhpLCBjb3NwaGk7IC8qIHNpbiBhbmQgY29zIHZhbHVlICAgICAgICAqL1xuICB2YXIgZGxvbjsgLyogZGVsdGEgbG9uZ2l0dWRlIHZhbHVlICAgICAgKi9cbiAgdmFyIGNvc2xvbjsgLyogY29zIG9mIGxvbmdpdHVkZSAgICAgICAgKi9cbiAgdmFyIGtzcDsgLyogc2NhbGUgZmFjdG9yICAgICAgICAgICovXG4gIHZhciBnLCB4LCB5O1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICBkbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcblxuICBzaW5waGkgPSBNYXRoLnNpbihsYXQpO1xuICBjb3NwaGkgPSBNYXRoLmNvcyhsYXQpO1xuXG4gIGNvc2xvbiA9IE1hdGguY29zKGRsb24pO1xuICBnID0gdGhpcy5zaW5fcDE0ICogc2lucGhpICsgdGhpcy5jb3NfcDE0ICogY29zcGhpICogY29zbG9uO1xuICBrc3AgPSAxO1xuICBpZiAoKGcgPiAwKSB8fCAoTWF0aC5hYnMoZykgPD0gRVBTTE4pKSB7XG4gICAgeCA9IHRoaXMuYSAqIGtzcCAqIGNvc3BoaSAqIE1hdGguc2luKGRsb24pO1xuICAgIHkgPSB0aGlzLnkwICsgdGhpcy5hICoga3NwICogKHRoaXMuY29zX3AxNCAqIHNpbnBoaSAtIHRoaXMuc2luX3AxNCAqIGNvc3BoaSAqIGNvc2xvbik7XG4gIH1cbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIHJoOyAvKiBoZWlnaHQgYWJvdmUgZWxsaXBzb2lkICAgICAgKi9cbiAgdmFyIHo7IC8qIGFuZ2xlICAgICAgICAgICovXG4gIHZhciBzaW56LCBjb3N6OyAvKiBzaW4gb2YgeiBhbmQgY29zIG9mIHogICAgICAqL1xuICB2YXIgY29uO1xuICB2YXIgbG9uLCBsYXQ7XG4gIC8qIEludmVyc2UgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgeiA9IGFzaW56KHJoIC8gdGhpcy5hKTtcblxuICBzaW56ID0gTWF0aC5zaW4oeik7XG4gIGNvc3ogPSBNYXRoLmNvcyh6KTtcblxuICBsb24gPSB0aGlzLmxvbmcwO1xuICBpZiAoTWF0aC5hYnMocmgpIDw9IEVQU0xOKSB7XG4gICAgbGF0ID0gdGhpcy5sYXQwO1xuICAgIHAueCA9IGxvbjtcbiAgICBwLnkgPSBsYXQ7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgbGF0ID0gYXNpbnooY29zeiAqIHRoaXMuc2luX3AxNCArIChwLnkgKiBzaW56ICogdGhpcy5jb3NfcDE0KSAvIHJoKTtcbiAgY29uID0gTWF0aC5hYnModGhpcy5sYXQwKSAtIEhBTEZfUEk7XG4gIGlmIChNYXRoLmFicyhjb24pIDw9IEVQU0xOKSB7XG4gICAgaWYgKHRoaXMubGF0MCA+PSAwKSB7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKHAueCwgLSBwLnkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgLSBNYXRoLmF0YW4yKC1wLngsIHAueSkpO1xuICAgIH1cbiAgICBwLnggPSBsb247XG4gICAgcC55ID0gbGF0O1xuICAgIHJldHVybiBwO1xuICB9XG4gIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIoKHAueCAqIHNpbnopLCByaCAqIHRoaXMuY29zX3AxNCAqIGNvc3ogLSBwLnkgKiB0aGlzLnNpbl9wMTQgKiBzaW56KSk7XG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIm9ydGhvXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCIvLyBRU0MgcHJvamVjdGlvbiByZXdyaXR0ZW4gZnJvbSB0aGUgb3JpZ2luYWwgUFJPSjRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9PU0dlby9wcm9qLjQvYmxvYi9tYXN0ZXIvc3JjL1BKX3FzYy5jXG5cbmltcG9ydCB7RVBTTE4sIFRXT19QSSwgU1BJLCBIQUxGX1BJLCBGT1JUUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG4vKiBjb25zdGFudHMgKi9cbnZhciBGQUNFX0VOVU0gPSB7XG4gICAgRlJPTlQ6IDEsXG4gICAgUklHSFQ6IDIsXG4gICAgQkFDSzogMyxcbiAgICBMRUZUOiA0LFxuICAgIFRPUDogNSxcbiAgICBCT1RUT006IDZcbn07XG5cbnZhciBBUkVBX0VOVU0gPSB7XG4gICAgQVJFQV8wOiAxLFxuICAgIEFSRUFfMTogMixcbiAgICBBUkVBXzI6IDMsXG4gICAgQVJFQV8zOiA0XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcblxuICB0aGlzLngwID0gdGhpcy54MCB8fCAwO1xuICB0aGlzLnkwID0gdGhpcy55MCB8fCAwO1xuICB0aGlzLmxhdDAgPSB0aGlzLmxhdDAgfHwgMDtcbiAgdGhpcy5sb25nMCA9IHRoaXMubG9uZzAgfHwgMDtcbiAgdGhpcy5sYXRfdHMgPSB0aGlzLmxhdF90cyB8fCAwO1xuICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZSB8fCBcIlF1YWRyaWxhdGVyYWxpemVkIFNwaGVyaWNhbCBDdWJlXCI7XG5cbiAgLyogRGV0ZXJtaW5lIHRoZSBjdWJlIGZhY2UgZnJvbSB0aGUgY2VudGVyIG9mIHByb2plY3Rpb24uICovXG4gIGlmICh0aGlzLmxhdDAgPj0gSEFMRl9QSSAtIEZPUlRQSSAvIDIuMCkge1xuICAgIHRoaXMuZmFjZSA9IEZBQ0VfRU5VTS5UT1A7XG4gIH0gZWxzZSBpZiAodGhpcy5sYXQwIDw9IC0oSEFMRl9QSSAtIEZPUlRQSSAvIDIuMCkpIHtcbiAgICB0aGlzLmZhY2UgPSBGQUNFX0VOVU0uQk9UVE9NO1xuICB9IGVsc2UgaWYgKE1hdGguYWJzKHRoaXMubG9uZzApIDw9IEZPUlRQSSkge1xuICAgIHRoaXMuZmFjZSA9IEZBQ0VfRU5VTS5GUk9OVDtcbiAgfSBlbHNlIGlmIChNYXRoLmFicyh0aGlzLmxvbmcwKSA8PSBIQUxGX1BJICsgRk9SVFBJKSB7XG4gICAgdGhpcy5mYWNlID0gdGhpcy5sb25nMCA+IDAuMCA/IEZBQ0VfRU5VTS5SSUdIVCA6IEZBQ0VfRU5VTS5MRUZUO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZmFjZSA9IEZBQ0VfRU5VTS5CQUNLO1xuICB9XG5cbiAgLyogRmlsbCBpbiB1c2VmdWwgdmFsdWVzIGZvciB0aGUgZWxsaXBzb2lkIDwtPiBzcGhlcmUgc2hpZnRcbiAgICogZGVzY3JpYmVkIGluIFtMSzEyXS4gKi9cbiAgaWYgKHRoaXMuZXMgIT09IDApIHtcbiAgICB0aGlzLm9uZV9taW51c19mID0gMSAtICh0aGlzLmEgLSB0aGlzLmIpIC8gdGhpcy5hO1xuICAgIHRoaXMub25lX21pbnVzX2Zfc3F1YXJlZCA9IHRoaXMub25lX21pbnVzX2YgKiB0aGlzLm9uZV9taW51c19mO1xuICB9XG59XG5cbi8vIFFTQyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciB4eSA9IHt4OiAwLCB5OiAwfTtcbiAgdmFyIGxhdCwgbG9uO1xuICB2YXIgdGhldGEsIHBoaTtcbiAgdmFyIHQsIG11O1xuICAvKiBudTsgKi9cbiAgdmFyIGFyZWEgPSB7dmFsdWU6IDB9O1xuXG4gIC8vIG1vdmUgbG9uIGFjY29yZGluZyB0byBwcm9qZWN0aW9uJ3MgbG9uXG4gIHAueCAtPSB0aGlzLmxvbmcwO1xuXG4gIC8qIENvbnZlcnQgdGhlIGdlb2RldGljIGxhdGl0dWRlIHRvIGEgZ2VvY2VudHJpYyBsYXRpdHVkZS5cbiAgICogVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgc2hpZnQgZnJvbSB0aGUgZWxsaXBzb2lkIHRvIHRoZSBzcGhlcmVcbiAgICogZGVzY3JpYmVkIGluIFtMSzEyXS4gKi9cbiAgaWYgKHRoaXMuZXMgIT09IDApIHsvL2lmIChQLT5lcyAhPSAwKSB7XG4gICAgbGF0ID0gTWF0aC5hdGFuKHRoaXMub25lX21pbnVzX2Zfc3F1YXJlZCAqIE1hdGgudGFuKHAueSkpO1xuICB9IGVsc2Uge1xuICAgIGxhdCA9IHAueTtcbiAgfVxuXG4gIC8qIENvbnZlcnQgdGhlIGlucHV0IGxhdCwgbG9uIGludG8gdGhldGEsIHBoaSBhcyB1c2VkIGJ5IFFTQy5cbiAgICogVGhpcyBkZXBlbmRzIG9uIHRoZSBjdWJlIGZhY2UgYW5kIHRoZSBhcmVhIG9uIGl0LlxuICAgKiBGb3IgdGhlIHRvcCBhbmQgYm90dG9tIGZhY2UsIHdlIGNhbiBjb21wdXRlIHRoZXRhIGFuZCBwaGlcbiAgICogZGlyZWN0bHkgZnJvbSBwaGksIGxhbS4gRm9yIHRoZSBvdGhlciBmYWNlcywgd2UgbXVzdCB1c2VcbiAgICogdW5pdCBzcGhlcmUgY2FydGVzaWFuIGNvb3JkaW5hdGVzIGFzIGFuIGludGVybWVkaWF0ZSBzdGVwLiAqL1xuICBsb24gPSBwLng7IC8vbG9uID0gbHAubGFtO1xuICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uVE9QKSB7XG4gICAgcGhpID0gSEFMRl9QSSAtIGxhdDtcbiAgICBpZiAobG9uID49IEZPUlRQSSAmJiBsb24gPD0gSEFMRl9QSSArIEZPUlRQSSkge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzA7XG4gICAgICB0aGV0YSA9IGxvbiAtIEhBTEZfUEk7XG4gICAgfSBlbHNlIGlmIChsb24gPiBIQUxGX1BJICsgRk9SVFBJIHx8IGxvbiA8PSAtKEhBTEZfUEkgKyBGT1JUUEkpKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMTtcbiAgICAgIHRoZXRhID0gKGxvbiA+IDAuMCA/IGxvbiAtIFNQSSA6IGxvbiArIFNQSSk7XG4gICAgfSBlbHNlIGlmIChsb24gPiAtKEhBTEZfUEkgKyBGT1JUUEkpICYmIGxvbiA8PSAtRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMjtcbiAgICAgIHRoZXRhID0gbG9uICsgSEFMRl9QSTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzM7XG4gICAgICB0aGV0YSA9IGxvbjtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uQk9UVE9NKSB7XG4gICAgcGhpID0gSEFMRl9QSSArIGxhdDtcbiAgICBpZiAobG9uID49IEZPUlRQSSAmJiBsb24gPD0gSEFMRl9QSSArIEZPUlRQSSkge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzA7XG4gICAgICB0aGV0YSA9IC1sb24gKyBIQUxGX1BJO1xuICAgIH0gZWxzZSBpZiAobG9uIDwgRk9SVFBJICYmIGxvbiA+PSAtRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMTtcbiAgICAgIHRoZXRhID0gLWxvbjtcbiAgICB9IGVsc2UgaWYgKGxvbiA8IC1GT1JUUEkgJiYgbG9uID49IC0oSEFMRl9QSSArIEZPUlRQSSkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8yO1xuICAgICAgdGhldGEgPSAtbG9uIC0gSEFMRl9QSTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzM7XG4gICAgICB0aGV0YSA9IChsb24gPiAwLjAgPyAtbG9uICsgU1BJIDogLWxvbiAtIFNQSSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBxLCByLCBzO1xuICAgIHZhciBzaW5sYXQsIGNvc2xhdDtcbiAgICB2YXIgc2lubG9uLCBjb3Nsb247XG5cbiAgICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uUklHSFQpIHtcbiAgICAgIGxvbiA9IHFzY19zaGlmdF9sb25fb3JpZ2luKGxvbiwgK0hBTEZfUEkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uQkFDSykge1xuICAgICAgbG9uID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obG9uLCArU1BJKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmFjZSA9PT0gRkFDRV9FTlVNLkxFRlQpIHtcbiAgICAgIGxvbiA9IHFzY19zaGlmdF9sb25fb3JpZ2luKGxvbiwgLUhBTEZfUEkpO1xuICAgIH1cbiAgICBzaW5sYXQgPSBNYXRoLnNpbihsYXQpO1xuICAgIGNvc2xhdCA9IE1hdGguY29zKGxhdCk7XG4gICAgc2lubG9uID0gTWF0aC5zaW4obG9uKTtcbiAgICBjb3Nsb24gPSBNYXRoLmNvcyhsb24pO1xuICAgIHEgPSBjb3NsYXQgKiBjb3Nsb247XG4gICAgciA9IGNvc2xhdCAqIHNpbmxvbjtcbiAgICBzID0gc2lubGF0O1xuXG4gICAgaWYgKHRoaXMuZmFjZSA9PT0gRkFDRV9FTlVNLkZST05UKSB7XG4gICAgICBwaGkgPSBNYXRoLmFjb3MocSk7XG4gICAgICB0aGV0YSA9IHFzY19md2RfZXF1YXRfZmFjZV90aGV0YShwaGksIHMsIHIsIGFyZWEpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uUklHSFQpIHtcbiAgICAgIHBoaSA9IE1hdGguYWNvcyhyKTtcbiAgICAgIHRoZXRhID0gcXNjX2Z3ZF9lcXVhdF9mYWNlX3RoZXRhKHBoaSwgcywgLXEsIGFyZWEpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uQkFDSykge1xuICAgICAgcGhpID0gTWF0aC5hY29zKC1xKTtcbiAgICAgIHRoZXRhID0gcXNjX2Z3ZF9lcXVhdF9mYWNlX3RoZXRhKHBoaSwgcywgLXIsIGFyZWEpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uTEVGVCkge1xuICAgICAgcGhpID0gTWF0aC5hY29zKC1yKTtcbiAgICAgIHRoZXRhID0gcXNjX2Z3ZF9lcXVhdF9mYWNlX3RoZXRhKHBoaSwgcywgcSwgYXJlYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIEltcG9zc2libGUgKi9cbiAgICAgIHBoaSA9IHRoZXRhID0gMDtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8wO1xuICAgIH1cbiAgfVxuXG4gIC8qIENvbXB1dGUgbXUgYW5kIG51IGZvciB0aGUgYXJlYSBvZiBkZWZpbml0aW9uLlxuICAgKiBGb3IgbXUsIHNlZSBFcS4gKDMtMjEpIGluIFtPTDc2XSwgYnV0IG5vdGUgdGhlIHR5cG9zOlxuICAgKiBjb21wYXJlIHdpdGggRXEuICgzLTE0KS4gRm9yIG51LCBzZWUgRXEuICgzLTM4KS4gKi9cbiAgbXUgPSBNYXRoLmF0YW4oKDEyIC8gU1BJKSAqICh0aGV0YSArIE1hdGguYWNvcyhNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhGT1JUUEkpKSAtIEhBTEZfUEkpKTtcbiAgdCA9IE1hdGguc3FydCgoMSAtIE1hdGguY29zKHBoaSkpIC8gKE1hdGguY29zKG11KSAqIE1hdGguY29zKG11KSkgLyAoMSAtIE1hdGguY29zKE1hdGguYXRhbigxIC8gTWF0aC5jb3ModGhldGEpKSkpKTtcblxuICAvKiBBcHBseSB0aGUgcmVzdWx0IHRvIHRoZSByZWFsIGFyZWEuICovXG4gIGlmIChhcmVhLnZhbHVlID09PSBBUkVBX0VOVU0uQVJFQV8xKSB7XG4gICAgbXUgKz0gSEFMRl9QSTtcbiAgfSBlbHNlIGlmIChhcmVhLnZhbHVlID09PSBBUkVBX0VOVU0uQVJFQV8yKSB7XG4gICAgbXUgKz0gU1BJO1xuICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzMpIHtcbiAgICBtdSArPSAxLjUgKiBTUEk7XG4gIH1cblxuICAvKiBOb3cgY29tcHV0ZSB4LCB5IGZyb20gbXUgYW5kIG51ICovXG4gIHh5LnggPSB0ICogTWF0aC5jb3MobXUpO1xuICB4eS55ID0gdCAqIE1hdGguc2luKG11KTtcbiAgeHkueCA9IHh5LnggKiB0aGlzLmEgKyB0aGlzLngwO1xuICB4eS55ID0geHkueSAqIHRoaXMuYSArIHRoaXMueTA7XG5cbiAgcC54ID0geHkueDtcbiAgcC55ID0geHkueTtcbiAgcmV0dXJuIHA7XG59XG5cbi8vIFFTQyBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBscCA9IHtsYW06IDAsIHBoaTogMH07XG4gIHZhciBtdSwgbnUsIGNvc211LCB0YW5udTtcbiAgdmFyIHRhbnRoZXRhLCB0aGV0YSwgY29zcGhpLCBwaGk7XG4gIHZhciB0O1xuICB2YXIgYXJlYSA9IHt2YWx1ZTogMH07XG5cbiAgLyogZGUtb2Zmc2V0ICovXG4gIHAueCA9IChwLnggLSB0aGlzLngwKSAvIHRoaXMuYTtcbiAgcC55ID0gKHAueSAtIHRoaXMueTApIC8gdGhpcy5hO1xuXG4gIC8qIENvbnZlcnQgdGhlIGlucHV0IHgsIHkgdG8gdGhlIG11IGFuZCBudSBhbmdsZXMgYXMgdXNlZCBieSBRU0MuXG4gICAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgYXJlYSBvZiB0aGUgY3ViZSBmYWNlLiAqL1xuICBudSA9IE1hdGguYXRhbihNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KSk7XG4gIG11ID0gTWF0aC5hdGFuMihwLnksIHAueCk7XG4gIGlmIChwLnggPj0gMC4wICYmIHAueCA+PSBNYXRoLmFicyhwLnkpKSB7XG4gICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzA7XG4gIH0gZWxzZSBpZiAocC55ID49IDAuMCAmJiBwLnkgPj0gTWF0aC5hYnMocC54KSkge1xuICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8xO1xuICAgIG11IC09IEhBTEZfUEk7XG4gIH0gZWxzZSBpZiAocC54IDwgMC4wICYmIC1wLnggPj0gTWF0aC5hYnMocC55KSkge1xuICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8yO1xuICAgIG11ID0gKG11IDwgMC4wID8gbXUgKyBTUEkgOiBtdSAtIFNQSSk7XG4gIH0gZWxzZSB7XG4gICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzM7XG4gICAgbXUgKz0gSEFMRl9QSTtcbiAgfVxuXG4gIC8qIENvbXB1dGUgcGhpIGFuZCB0aGV0YSBmb3IgdGhlIGFyZWEgb2YgZGVmaW5pdGlvbi5cbiAgICogVGhlIGludmVyc2UgcHJvamVjdGlvbiBpcyBub3QgZGVzY3JpYmVkIGluIHRoZSBvcmlnaW5hbCBwYXBlciwgYnV0IHNvbWVcbiAgICogZ29vZCBoaW50cyBjYW4gYmUgZm91bmQgaGVyZSAoYXMgb2YgMjAxMS0xMi0xNCk6XG4gICAqIGh0dHA6Ly9maXRzLmdzZmMubmFzYS5nb3YvZml0c2JpdHMvc2FmLjkzL3NhZi45MzAyXG4gICAqIChzZWFyY2ggZm9yIFwiTWVzc2FnZS1JZDogPDkzMDIxODE3NTkuQUEyNTQ3NyBhdCBmaXRzLmN2Lm5yYW8uZWR1PlwiKSAqL1xuICB0ID0gKFNQSSAvIDEyKSAqIE1hdGgudGFuKG11KTtcbiAgdGFudGhldGEgPSBNYXRoLnNpbih0KSAvIChNYXRoLmNvcyh0KSAtICgxIC8gTWF0aC5zcXJ0KDIpKSk7XG4gIHRoZXRhID0gTWF0aC5hdGFuKHRhbnRoZXRhKTtcbiAgY29zbXUgPSBNYXRoLmNvcyhtdSk7XG4gIHRhbm51ID0gTWF0aC50YW4obnUpO1xuICBjb3NwaGkgPSAxIC0gY29zbXUgKiBjb3NtdSAqIHRhbm51ICogdGFubnUgKiAoMSAtIE1hdGguY29zKE1hdGguYXRhbigxIC8gTWF0aC5jb3ModGhldGEpKSkpO1xuICBpZiAoY29zcGhpIDwgLTEpIHtcbiAgICBjb3NwaGkgPSAtMTtcbiAgfSBlbHNlIGlmIChjb3NwaGkgPiArMSkge1xuICAgIGNvc3BoaSA9ICsxO1xuICB9XG5cbiAgLyogQXBwbHkgdGhlIHJlc3VsdCB0byB0aGUgcmVhbCBhcmVhIG9uIHRoZSBjdWJlIGZhY2UuXG4gICAqIEZvciB0aGUgdG9wIGFuZCBib3R0b20gZmFjZSwgd2UgY2FuIGNvbXB1dGUgcGhpIGFuZCBsYW0gZGlyZWN0bHkuXG4gICAqIEZvciB0aGUgb3RoZXIgZmFjZXMsIHdlIG11c3QgdXNlIHVuaXQgc3BoZXJlIGNhcnRlc2lhbiBjb29yZGluYXRlc1xuICAgKiBhcyBhbiBpbnRlcm1lZGlhdGUgc3RlcC4gKi9cbiAgaWYgKHRoaXMuZmFjZSA9PT0gRkFDRV9FTlVNLlRPUCkge1xuICAgIHBoaSA9IE1hdGguYWNvcyhjb3NwaGkpO1xuICAgIGxwLnBoaSA9IEhBTEZfUEkgLSBwaGk7XG4gICAgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzApIHtcbiAgICAgIGxwLmxhbSA9IHRoZXRhICsgSEFMRl9QSTtcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzEpIHtcbiAgICAgIGxwLmxhbSA9ICh0aGV0YSA8IDAuMCA/IHRoZXRhICsgU1BJIDogdGhldGEgLSBTUEkpO1xuICAgIH0gZWxzZSBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMikge1xuICAgICAgbHAubGFtID0gdGhldGEgLSBIQUxGX1BJO1xuICAgIH0gZWxzZSAvKiBhcmVhLnZhbHVlID09IEFSRUFfRU5VTS5BUkVBXzMgKi8ge1xuICAgICAgbHAubGFtID0gdGhldGE7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRoaXMuZmFjZSA9PT0gRkFDRV9FTlVNLkJPVFRPTSkge1xuICAgIHBoaSA9IE1hdGguYWNvcyhjb3NwaGkpO1xuICAgIGxwLnBoaSA9IHBoaSAtIEhBTEZfUEk7XG4gICAgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzApIHtcbiAgICAgIGxwLmxhbSA9IC10aGV0YSArIEhBTEZfUEk7XG4gICAgfSBlbHNlIGlmIChhcmVhLnZhbHVlID09PSBBUkVBX0VOVU0uQVJFQV8xKSB7XG4gICAgICBscC5sYW0gPSAtdGhldGE7XG4gICAgfSBlbHNlIGlmIChhcmVhLnZhbHVlID09PSBBUkVBX0VOVU0uQVJFQV8yKSB7XG4gICAgICBscC5sYW0gPSAtdGhldGEgLSBIQUxGX1BJO1xuICAgIH0gZWxzZSAvKiBhcmVhLnZhbHVlID09IEFSRUFfRU5VTS5BUkVBXzMgKi8ge1xuICAgICAgbHAubGFtID0gKHRoZXRhIDwgMC4wID8gLXRoZXRhIC0gU1BJIDogLXRoZXRhICsgU1BJKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLyogQ29tcHV0ZSBwaGkgYW5kIGxhbSB2aWEgY2FydGVzaWFuIHVuaXQgc3BoZXJlIGNvb3JkaW5hdGVzLiAqL1xuICAgIHZhciBxLCByLCBzO1xuICAgIHEgPSBjb3NwaGk7XG4gICAgdCA9IHEgKiBxO1xuICAgIGlmICh0ID49IDEpIHtcbiAgICAgIHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBzID0gTWF0aC5zcXJ0KDEgLSB0KSAqIE1hdGguc2luKHRoZXRhKTtcbiAgICB9XG4gICAgdCArPSBzICogcztcbiAgICBpZiAodCA+PSAxKSB7XG4gICAgICByID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IE1hdGguc3FydCgxIC0gdCk7XG4gICAgfVxuICAgIC8qIFJvdGF0ZSBxLHIscyBpbnRvIHRoZSBjb3JyZWN0IGFyZWEuICovXG4gICAgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzEpIHtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IC1zO1xuICAgICAgcyA9IHQ7XG4gICAgfSBlbHNlIGlmIChhcmVhLnZhbHVlID09PSBBUkVBX0VOVU0uQVJFQV8yKSB7XG4gICAgICByID0gLXI7XG4gICAgICBzID0gLXM7XG4gICAgfSBlbHNlIGlmIChhcmVhLnZhbHVlID09PSBBUkVBX0VOVU0uQVJFQV8zKSB7XG4gICAgICB0ID0gcjtcbiAgICAgIHIgPSBzO1xuICAgICAgcyA9IC10O1xuICAgIH1cbiAgICAvKiBSb3RhdGUgcSxyLHMgaW50byB0aGUgY29ycmVjdCBjdWJlIGZhY2UuICovXG4gICAgaWYgKHRoaXMuZmFjZSA9PT0gRkFDRV9FTlVNLlJJR0hUKSB7XG4gICAgICB0ID0gcTtcbiAgICAgIHEgPSAtcjtcbiAgICAgIHIgPSB0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uQkFDSykge1xuICAgICAgcSA9IC1xO1xuICAgICAgciA9IC1yO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uTEVGVCkge1xuICAgICAgdCA9IHE7XG4gICAgICBxID0gcjtcbiAgICAgIHIgPSAtdDtcbiAgICB9XG4gICAgLyogTm93IGNvbXB1dGUgcGhpIGFuZCBsYW0gZnJvbSB0aGUgdW5pdCBzcGhlcmUgY29vcmRpbmF0ZXMuICovXG4gICAgbHAucGhpID0gTWF0aC5hY29zKC1zKSAtIEhBTEZfUEk7XG4gICAgbHAubGFtID0gTWF0aC5hdGFuMihyLCBxKTtcbiAgICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uUklHSFQpIHtcbiAgICAgIGxwLmxhbSA9IHFzY19zaGlmdF9sb25fb3JpZ2luKGxwLmxhbSwgLUhBTEZfUEkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uQkFDSykge1xuICAgICAgbHAubGFtID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obHAubGFtLCAtU1BJKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmFjZSA9PT0gRkFDRV9FTlVNLkxFRlQpIHtcbiAgICAgIGxwLmxhbSA9IHFzY19zaGlmdF9sb25fb3JpZ2luKGxwLmxhbSwgK0hBTEZfUEkpO1xuICAgIH1cbiAgfVxuXG4gIC8qIEFwcGx5IHRoZSBzaGlmdCBmcm9tIHRoZSBzcGhlcmUgdG8gdGhlIGVsbGlwc29pZCBhcyBkZXNjcmliZWRcbiAgICogaW4gW0xLMTJdLiAqL1xuICBpZiAodGhpcy5lcyAhPT0gMCkge1xuICAgIHZhciBpbnZlcnRfc2lnbjtcbiAgICB2YXIgdGFucGhpLCB4YTtcbiAgICBpbnZlcnRfc2lnbiA9IChscC5waGkgPCAwID8gMSA6IDApO1xuICAgIHRhbnBoaSA9IE1hdGgudGFuKGxwLnBoaSk7XG4gICAgeGEgPSB0aGlzLmIgLyBNYXRoLnNxcnQodGFucGhpICogdGFucGhpICsgdGhpcy5vbmVfbWludXNfZl9zcXVhcmVkKTtcbiAgICBscC5waGkgPSBNYXRoLmF0YW4oTWF0aC5zcXJ0KHRoaXMuYSAqIHRoaXMuYSAtIHhhICogeGEpIC8gKHRoaXMub25lX21pbnVzX2YgKiB4YSkpO1xuICAgIGlmIChpbnZlcnRfc2lnbikge1xuICAgICAgbHAucGhpID0gLWxwLnBoaTtcbiAgICB9XG4gIH1cblxuICBscC5sYW0gKz0gdGhpcy5sb25nMDtcbiAgcC54ID0gbHAubGFtO1xuICBwLnkgPSBscC5waGk7XG4gIHJldHVybiBwO1xufVxuXG4vKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGZvcndhcmQgcHJvamVjdGlvbjogY29tcHV0ZSB0aGUgdGhldGEgYW5nbGVcbiAqIGFuZCBkZXRlcm1pbmUgdGhlIGFyZWEgbnVtYmVyLiAqL1xuZnVuY3Rpb24gcXNjX2Z3ZF9lcXVhdF9mYWNlX3RoZXRhKHBoaSwgeSwgeCwgYXJlYSkge1xuICB2YXIgdGhldGE7XG4gIGlmIChwaGkgPCBFUFNMTikge1xuICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8wO1xuICAgIHRoZXRhID0gMC4wO1xuICB9IGVsc2Uge1xuICAgIHRoZXRhID0gTWF0aC5hdGFuMih5LCB4KTtcbiAgICBpZiAoTWF0aC5hYnModGhldGEpIDw9IEZPUlRQSSkge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzA7XG4gICAgfSBlbHNlIGlmICh0aGV0YSA+IEZPUlRQSSAmJiB0aGV0YSA8PSBIQUxGX1BJICsgRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMTtcbiAgICAgIHRoZXRhIC09IEhBTEZfUEk7XG4gICAgfSBlbHNlIGlmICh0aGV0YSA+IEhBTEZfUEkgKyBGT1JUUEkgfHwgdGhldGEgPD0gLShIQUxGX1BJICsgRk9SVFBJKSkge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzI7XG4gICAgICB0aGV0YSA9ICh0aGV0YSA+PSAwLjAgPyB0aGV0YSAtIFNQSSA6IHRoZXRhICsgU1BJKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzM7XG4gICAgICB0aGV0YSArPSBIQUxGX1BJO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhldGE7XG59XG5cbi8qIEhlbHBlciBmdW5jdGlvbjogc2hpZnQgdGhlIGxvbmdpdHVkZS4gKi9cbmZ1bmN0aW9uIHFzY19zaGlmdF9sb25fb3JpZ2luKGxvbiwgb2Zmc2V0KSB7XG4gIHZhciBzbG9uID0gbG9uICsgb2Zmc2V0O1xuICBpZiAoc2xvbiA8IC1TUEkpIHtcbiAgICBzbG9uICs9IFRXT19QSTtcbiAgfSBlbHNlIGlmIChzbG9uID4gK1NQSSkge1xuICAgIHNsb24gLT0gVFdPX1BJO1xuICB9XG4gIHJldHVybiBzbG9uO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiUXVhZHJpbGF0ZXJhbGl6ZWQgU3BoZXJpY2FsIEN1YmVcIiwgXCJRdWFkcmlsYXRlcmFsaXplZF9TcGhlcmljYWxfQ3ViZVwiLCBcInFzY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuXG4iLCIvLyBSb2JpbnNvbiBwcm9qZWN0aW9uXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vT1NHZW8vcHJvai40L2Jsb2IvbWFzdGVyL3NyYy9QSl9yb2Jpbi5jXG4vLyBQb2x5bm9taWFsIGNvZWZpY2llbnRzIGZyb20gaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmNvbXAuZ2lzLnByb2otNC5kZXZlbC82MDM5XG5cbmltcG9ydCB7SEFMRl9QSSwgRDJSLCBSMkQsIEVQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcblxudmFyIENPRUZTX1ggPSBbXG4gICAgWzEuMDAwMCwgMi4yMTk5ZS0xNywgLTcuMTU1MTVlLTA1LCAzLjExMDNlLTA2XSxcbiAgICBbMC45OTg2LCAtMC4wMDA0ODIyNDMsIC0yLjQ4OTdlLTA1LCAtMS4zMzA5ZS0wNl0sXG4gICAgWzAuOTk1NCwgLTAuMDAwODMxMDMsIC00LjQ4NjA1ZS0wNSwgLTkuODY3MDFlLTA3XSxcbiAgICBbMC45OTAwLCAtMC4wMDEzNTM2NCwgLTUuOTY2MWUtMDUsIDMuNjc3N2UtMDZdLFxuICAgIFswLjk4MjIsIC0wLjAwMTY3NDQyLCAtNC40OTU0N2UtMDYsIC01LjcyNDExZS0wNl0sXG4gICAgWzAuOTczMCwgLTAuMDAyMTQ4NjgsIC05LjAzNTcxZS0wNSwgMS44NzM2ZS0wOF0sXG4gICAgWzAuOTYwMCwgLTAuMDAzMDUwODUsIC05LjAwNzYxZS0wNSwgMS42NDkxN2UtMDZdLFxuICAgIFswLjk0MjcsIC0wLjAwMzgyNzkyLCAtNi41MzM4NmUtMDUsIC0yLjYxNTRlLTA2XSxcbiAgICBbMC45MjE2LCAtMC4wMDQ2Nzc0NiwgLTAuMDAwMTA0NTcsIDQuODEyNDNlLTA2XSxcbiAgICBbMC44OTYyLCAtMC4wMDUzNjIyMywgLTMuMjM4MzFlLTA1LCAtNS40MzQzMmUtMDZdLFxuICAgIFswLjg2NzksIC0wLjAwNjA5MzYzLCAtMC4wMDAxMTM4OTgsIDMuMzI0ODRlLTA2XSxcbiAgICBbMC44MzUwLCAtMC4wMDY5ODMyNSwgLTYuNDAyNTNlLTA1LCA5LjM0OTU5ZS0wN10sXG4gICAgWzAuNzk4NiwgLTAuMDA3NTUzMzgsIC01LjAwMDA5ZS0wNSwgOS4zNTMyNGUtMDddLFxuICAgIFswLjc1OTcsIC0wLjAwNzk4MzI0LCAtMy41OTcxZS0wNSwgLTIuMjc2MjZlLTA2XSxcbiAgICBbMC43MTg2LCAtMC4wMDg1MTM2NywgLTcuMDExNDllLTA1LCAtOC42MzAzZS0wNl0sXG4gICAgWzAuNjczMiwgLTAuMDA5ODYyMDksIC0wLjAwMDE5OTU2OSwgMS45MTk3NGUtMDVdLFxuICAgIFswLjYyMTMsIC0wLjAxMDQxOCwgOC44MzkyM2UtMDUsIDYuMjQwNTFlLTA2XSxcbiAgICBbMC41NzIyLCAtMC4wMDkwNjYwMSwgMC4wMDAxODIsIDYuMjQwNTFlLTA2XSxcbiAgICBbMC41MzIyLCAtMC4wMDY3Nzc5NywgMC4wMDAyNzU2MDgsIDYuMjQwNTFlLTA2XVxuXTtcblxudmFyIENPRUZTX1kgPSBbXG4gICAgWy01LjIwNDE3ZS0xOCwgMC4wMTI0LCAxLjIxNDMxZS0xOCwgLTguNDUyODRlLTExXSxcbiAgICBbMC4wNjIwLCAwLjAxMjQsIC0xLjI2NzkzZS0wOSwgNC4yMjY0MmUtMTBdLFxuICAgIFswLjEyNDAsIDAuMDEyNCwgNS4wNzE3MWUtMDksIC0xLjYwNjA0ZS0wOV0sXG4gICAgWzAuMTg2MCwgMC4wMTIzOTk5LCAtMS45MDE4OWUtMDgsIDYuMDAxNTJlLTA5XSxcbiAgICBbMC4yNDgwLCAwLjAxMjQwMDIsIDcuMTAwMzllLTA4LCAtMi4yNGUtMDhdLFxuICAgIFswLjMxMDAsIDAuMDEyMzk5MiwgLTIuNjQ5OTdlLTA3LCA4LjM1OTg2ZS0wOF0sXG4gICAgWzAuMzcyMCwgMC4wMTI0MDI5LCA5Ljg4OTgzZS0wNywgLTMuMTE5OTRlLTA3XSxcbiAgICBbMC40MzQwLCAwLjAxMjM4OTMsIC0zLjY5MDkzZS0wNiwgLTQuMzU2MjFlLTA3XSxcbiAgICBbMC40OTU4LCAwLjAxMjMxOTgsIC0xLjAyMjUyZS0wNSwgLTMuNDU1MjNlLTA3XSxcbiAgICBbMC41NTcxLCAwLjAxMjE5MTYsIC0xLjU0MDgxZS0wNSwgLTUuODIyODhlLTA3XSxcbiAgICBbMC42MTc2LCAwLjAxMTk5MzgsIC0yLjQxNDI0ZS0wNSwgLTUuMjUzMjdlLTA3XSxcbiAgICBbMC42NzY5LCAwLjAxMTcxMywgLTMuMjAyMjNlLTA1LCAtNS4xNjQwNWUtMDddLFxuICAgIFswLjczNDYsIDAuMDExMzU0MSwgLTMuOTc2ODRlLTA1LCAtNi4wOTA1MmUtMDddLFxuICAgIFswLjc5MDMsIDAuMDEwOTEwNywgLTQuODkwNDJlLTA1LCAtMS4wNDczOWUtMDZdLFxuICAgIFswLjg0MzUsIDAuMDEwMzQzMSwgLTYuNDYxNWUtMDUsIC0xLjQwMzc0ZS0wOV0sXG4gICAgWzAuODkzNiwgMC4wMDk2OTY4NiwgLTYuNDYzNmUtMDUsIC04LjU0N2UtMDZdLFxuICAgIFswLjkzOTQsIDAuMDA4NDA5NDcsIC0wLjAwMDE5Mjg0MSwgLTQuMjEwNmUtMDZdLFxuICAgIFswLjk3NjEsIDAuMDA2MTY1MjcsIC0wLjAwMDI1NiwgLTQuMjEwNmUtMDZdLFxuICAgIFsxLjAwMDAsIDAuMDAzMjg5NDcsIC0wLjAwMDMxOTE1OSwgLTQuMjEwNmUtMDZdXG5dO1xuXG52YXIgRlhDID0gMC44NDg3O1xudmFyIEZZQyA9IDEuMzUyMztcbnZhciBDMSA9IFIyRC81OyAvLyByYWQgdG8gNS1kZWdyZWUgaW50ZXJ2YWxcbnZhciBSQzEgPSAxL0MxO1xudmFyIE5PREVTID0gMTg7XG5cbnZhciBwb2x5M192YWwgPSBmdW5jdGlvbihjb2VmcywgeCkge1xuICAgIHJldHVybiBjb2Vmc1swXSArIHggKiAoY29lZnNbMV0gKyB4ICogKGNvZWZzWzJdICsgeCAqIGNvZWZzWzNdKSk7XG59O1xuXG52YXIgcG9seTNfZGVyID0gZnVuY3Rpb24oY29lZnMsIHgpIHtcbiAgICByZXR1cm4gY29lZnNbMV0gKyB4ICogKDIgKiBjb2Vmc1syXSArIHggKiAzICogY29lZnNbM10pO1xufTtcblxuZnVuY3Rpb24gbmV3dG9uX3JhcHNob24oZl9kZiwgc3RhcnQsIG1heF9lcnIsIGl0ZXJzKSB7XG4gICAgdmFyIHggPSBzdGFydDtcbiAgICBmb3IgKDsgaXRlcnM7IC0taXRlcnMpIHtcbiAgICAgICAgdmFyIHVwZCA9IGZfZGYoeCk7XG4gICAgICAgIHggLT0gdXBkO1xuICAgICAgICBpZiAoTWF0aC5hYnModXBkKSA8IG1heF9lcnIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLngwID0gdGhpcy54MCB8fCAwO1xuICAgIHRoaXMueTAgPSB0aGlzLnkwIHx8IDA7XG4gICAgdGhpcy5sb25nMCA9IHRoaXMubG9uZzAgfHwgMDtcbiAgICB0aGlzLmVzID0gMDtcbiAgICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZSB8fCBcIlJvYmluc29uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKGxsKSB7XG4gICAgdmFyIGxvbiA9IGFkanVzdF9sb24obGwueCAtIHRoaXMubG9uZzApO1xuXG4gICAgdmFyIGRwaGkgPSBNYXRoLmFicyhsbC55KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoZHBoaSAqIEMxKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgaSA9IDA7XG4gICAgfSBlbHNlIGlmIChpID49IE5PREVTKSB7XG4gICAgICAgIGkgPSBOT0RFUyAtIDE7XG4gICAgfVxuICAgIGRwaGkgPSBSMkQgKiAoZHBoaSAtIFJDMSAqIGkpO1xuICAgIHZhciB4eSA9IHtcbiAgICAgICAgeDogcG9seTNfdmFsKENPRUZTX1hbaV0sIGRwaGkpICogbG9uLFxuICAgICAgICB5OiBwb2x5M192YWwoQ09FRlNfWVtpXSwgZHBoaSlcbiAgICB9O1xuICAgIGlmIChsbC55IDwgMCkge1xuICAgICAgICB4eS55ID0gLXh5Lnk7XG4gICAgfVxuXG4gICAgeHkueCA9IHh5LnggKiB0aGlzLmEgKiBGWEMgKyB0aGlzLngwO1xuICAgIHh5LnkgPSB4eS55ICogdGhpcy5hICogRllDICsgdGhpcy55MDtcbiAgICByZXR1cm4geHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHh5KSB7XG4gICAgdmFyIGxsID0ge1xuICAgICAgICB4OiAoeHkueCAtIHRoaXMueDApIC8gKHRoaXMuYSAqIEZYQyksXG4gICAgICAgIHk6IE1hdGguYWJzKHh5LnkgLSB0aGlzLnkwKSAvICh0aGlzLmEgKiBGWUMpXG4gICAgfTtcblxuICAgIGlmIChsbC55ID49IDEpIHsgLy8gcGF0aG9sb2dpYyBjYXNlXG4gICAgICAgIGxsLnggLz0gQ09FRlNfWFtOT0RFU11bMF07XG4gICAgICAgIGxsLnkgPSB4eS55IDwgMCA/IC1IQUxGX1BJIDogSEFMRl9QSTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmaW5kIHRhYmxlIGludGVydmFsXG4gICAgICAgIHZhciBpID0gTWF0aC5mbG9vcihsbC55ICogTk9ERVMpO1xuICAgICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPj0gTk9ERVMpIHtcbiAgICAgICAgICAgIGkgPSBOT0RFUyAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgaWYgKENPRUZTX1lbaV1bMF0gPiBsbC55KSB7XG4gICAgICAgICAgICAgICAgLS1pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChDT0VGU19ZW2krMV1bMF0gPD0gbGwueSkge1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGluZWFyIGludGVycG9sYXRpb24gaW4gNSBkZWdyZWUgaW50ZXJ2YWxcbiAgICAgICAgdmFyIGNvZWZzID0gQ09FRlNfWVtpXTtcbiAgICAgICAgdmFyIHQgPSA1ICogKGxsLnkgLSBjb2Vmc1swXSkgLyAoQ09FRlNfWVtpKzFdWzBdIC0gY29lZnNbMF0pO1xuICAgICAgICAvLyBmaW5kIHQgc28gdGhhdCBwb2x5M192YWwoY29lZnMsIHQpID0gbGwueVxuICAgICAgICB0ID0gbmV3dG9uX3JhcHNob24oZnVuY3Rpb24oeCkge1xuICAgICAgICAgICAgcmV0dXJuIChwb2x5M192YWwoY29lZnMsIHgpIC0gbGwueSkgLyBwb2x5M19kZXIoY29lZnMsIHgpO1xuICAgICAgICB9LCB0LCBFUFNMTiwgMTAwKTtcblxuICAgICAgICBsbC54IC89IHBvbHkzX3ZhbChDT0VGU19YW2ldLCB0KTtcbiAgICAgICAgbGwueSA9ICg1ICogaSArIHQpICogRDJSO1xuICAgICAgICBpZiAoeHkueSA8IDApIHtcbiAgICAgICAgICAgIGxsLnkgPSAtbGwueTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxsLnggPSBhZGp1c3RfbG9uKGxsLnggKyB0aGlzLmxvbmcwKTtcbiAgICByZXR1cm4gbGw7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJSb2JpbnNvblwiLCBcInJvYmluXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQge1xuICAgIGdlb2RldGljVG9HZW9jZW50cmljLFxuICAgIGdlb2NlbnRyaWNUb0dlb2RldGljXG59IGZyb20gJy4uL2RhdHVtVXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLm5hbWUgPSAnZ2VvY2VudCc7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICAgIHZhciBwb2ludCA9IGdlb2RldGljVG9HZW9jZW50cmljKHAsIHRoaXMuZXMsIHRoaXMuYSk7XG4gICAgcmV0dXJuIHBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gICAgdmFyIHBvaW50ID0gZ2VvY2VudHJpY1RvR2VvZGV0aWMocCwgdGhpcy5lcywgdGhpcy5hLCB0aGlzLmIpO1xuICAgIHJldHVybiBwb2ludDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkdlb2NlbnRyaWNcIiwgJ2dlb2NlbnRyaWMnLCBcImdlb2NlbnRcIiwgXCJHZW9jZW50XCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIGluaXQ6IGluaXQsXG4gICAgZm9yd2FyZDogZm9yd2FyZCxcbiAgICBpbnZlcnNlOiBpbnZlcnNlLFxuICAgIG5hbWVzOiBuYW1lc1xufTsiLCJcbnZhciBtb2RlID0ge1xuICBOX1BPTEU6IDAsXG4gIFNfUE9MRTogMSxcbiAgRVFVSVQ6IDIsXG4gIE9CTElROiAzXG59O1xuXG5pbXBvcnQgeyBEMlIsIEhBTEZfUEksIEVQU0xOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy92YWx1ZXNcIjtcbmltcG9ydCBoeXBvdCBmcm9tIFwiLi4vY29tbW9uL2h5cG90XCI7XG5cbnZhciBwYXJhbXMgPSB7XG4gIGg6ICAgICB7IGRlZjogMTAwMDAwLCBudW06IHRydWUgfSwgICAgICAgICAgIC8vIGRlZmF1bHQgaXMgS2FybWFuIGxpbmUsIG5vIGRlZmF1bHQgaW4gUFJPSi43XG4gIGF6aTogICB7IGRlZjogMCwgbnVtOiB0cnVlLCBkZWdyZWVzOiB0cnVlIH0sIC8vIGRlZmF1bHQgaXMgTm9ydGhcbiAgdGlsdDogIHsgZGVmOiAwLCBudW06IHRydWUsIGRlZ3JlZXM6IHRydWUgfSwgLy8gZGVmYXVsdCBpcyBOYWRpclxuICBsb25nMDogeyBkZWY6IDAsIG51bTogdHJ1ZSB9LCAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGlzIEdyZWVud2ljaCwgY29udmVyc2lvbiB0byByYWQgaXMgYXV0b21hdGljXG4gIGxhdDA6ICB7IGRlZjogMCwgbnVtOiB0cnVlIH0gICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgaXMgRXF1YXRvciwgY29udmVyc2lvbiB0byByYWQgaXMgYXV0b21hdGljXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzW3BdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzW3BdID0gcGFyYW1zW3BdLmRlZjtcbiAgICB9IGVsc2UgaWYgKHBhcmFtc1twXS5udW0gJiYgaXNOYU4odGhpc1twXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcGFyYW1ldGVyIHZhbHVlLCBtdXN0IGJlIG51bWVyaWMgXCIgKyBwICsgXCIgPSBcIiArIHRoaXNbcF0pO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zW3BdLm51bSkge1xuICAgICAgdGhpc1twXSA9IHBhcnNlRmxvYXQodGhpc1twXSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXNbcF0uZGVncmVlcykge1xuICAgICAgdGhpc1twXSA9IHRoaXNbcF0gKiBEMlI7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIGlmIChNYXRoLmFicygoTWF0aC5hYnModGhpcy5sYXQwKSAtIEhBTEZfUEkpKSA8IEVQU0xOKSB7XG4gICAgdGhpcy5tb2RlID0gdGhpcy5sYXQwIDwgMCA/IG1vZGUuU19QT0xFIDogbW9kZS5OX1BPTEU7XG4gIH0gZWxzZSBpZiAoTWF0aC5hYnModGhpcy5sYXQwKSA8IEVQU0xOKSB7XG4gICAgdGhpcy5tb2RlID0gbW9kZS5FUVVJVDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlLk9CTElRO1xuICAgIHRoaXMuc2lucGgwID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgICB0aGlzLmNvc3BoMCA9IE1hdGguY29zKHRoaXMubGF0MCk7XG4gIH1cblxuICB0aGlzLnBuMSA9IHRoaXMuaCAvIHRoaXMuYTsgIC8vIE5vcm1hbGl6ZSByZWxhdGl2ZSB0byB0aGUgRWFydGgncyByYWRpdXNcblxuICBpZiAodGhpcy5wbjEgPD0gMCB8fCB0aGlzLnBuMSA+IDFlMTApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhlaWdodFwiKTtcbiAgfVxuICBcbiAgdGhpcy5wID0gMSArIHRoaXMucG4xO1xuICB0aGlzLnJwID0gMSAvIHRoaXMucDtcbiAgdGhpcy5oMSA9IDEgLyB0aGlzLnBuMTtcbiAgdGhpcy5wZmFjdCA9ICh0aGlzLnAgKyAxKSAqIHRoaXMuaDE7XG4gIHRoaXMuZXMgPSAwO1xuXG4gIHZhciBvbWVnYSA9IHRoaXMudGlsdDtcbiAgdmFyIGdhbW1hID0gdGhpcy5hemk7XG4gIHRoaXMuY2cgPSBNYXRoLmNvcyhnYW1tYSk7XG4gIHRoaXMuc2cgPSBNYXRoLnNpbihnYW1tYSk7XG4gIHRoaXMuY3cgPSBNYXRoLmNvcyhvbWVnYSk7XG4gIHRoaXMuc3cgPSBNYXRoLnNpbihvbWVnYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgcC54IC09IHRoaXMubG9uZzA7XG4gIHZhciBzaW5waGkgPSBNYXRoLnNpbihwLnkpO1xuICB2YXIgY29zcGhpID0gTWF0aC5jb3MocC55KTtcbiAgdmFyIGNvc2xhbSA9IE1hdGguY29zKHAueCk7XG4gIHZhciB4LCB5O1xuICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgbW9kZS5PQkxJUTpcbiAgICAgIHkgPSB0aGlzLnNpbnBoMCAqIHNpbnBoaSArIHRoaXMuY29zcGgwICogY29zcGhpICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLkVRVUlUOlxuICAgICAgeSA9IGNvc3BoaSAqIGNvc2xhbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbW9kZS5TX1BPTEU6XG4gICAgICB5ID0gLXNpbnBoaTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbW9kZS5OX1BPTEU6XG4gICAgICB5ID0gc2lucGhpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgeSA9IHRoaXMucG4xIC8gKHRoaXMucCAtIHkpO1xuICB4ID0geSAqIGNvc3BoaSAqIE1hdGguc2luKHAueCk7XG5cbiAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICBjYXNlIG1vZGUuT0JMSVE6XG4gICAgICB5ICo9IHRoaXMuY29zcGgwICogc2lucGhpIC0gdGhpcy5zaW5waDAgKiBjb3NwaGkgKiBjb3NsYW07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG1vZGUuRVFVSVQ6XG4gICAgICB5ICo9IHNpbnBoaTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbW9kZS5OX1BPTEU6XG4gICAgICB5ICo9IC0oY29zcGhpICogY29zbGFtKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbW9kZS5TX1BPTEU6XG4gICAgICB5ICo9IGNvc3BoaSAqIGNvc2xhbTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gVGlsdCBcbiAgdmFyIHl0LCBiYTtcbiAgeXQgPSB5ICogdGhpcy5jZyArIHggKiB0aGlzLnNnO1xuICBiYSA9IDEgLyAoeXQgKiB0aGlzLnN3ICogdGhpcy5oMSArIHRoaXMuY3cpO1xuICB4ID0gKHggKiB0aGlzLmNnIC0geSAqIHRoaXMuc2cpICogdGhpcy5jdyAqIGJhO1xuICB5ID0geXQgKiBiYTtcblxuICBwLnggPSB4ICogdGhpcy5hO1xuICBwLnkgPSB5ICogdGhpcy5hO1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICBwLnggLz0gdGhpcy5hO1xuICBwLnkgLz0gdGhpcy5hO1xuICB2YXIgciA9IHsgeDogcC54LCB5OiBwLnkgfTtcblxuICAvLyBVbi1UaWx0XG4gIHZhciBibSwgYnEsIHl0O1xuICB5dCA9IDEgLyAodGhpcy5wbjEgLSBwLnkgKiB0aGlzLnN3KTtcbiAgYm0gPSB0aGlzLnBuMSAqIHAueCAqIHl0O1xuICBicSA9IHRoaXMucG4xICogcC55ICogdGhpcy5jdyAqIHl0O1xuICBwLnggPSBibSAqIHRoaXMuY2cgKyBicSAqIHRoaXMuc2c7XG4gIHAueSA9IGJxICogdGhpcy5jZyAtIGJtICogdGhpcy5zZztcblxuICB2YXIgcmggPSBoeXBvdChwLngsIHAueSk7XG4gIGlmIChNYXRoLmFicyhyaCkgPCBFUFNMTikge1xuICAgIHIueCA9IDA7XG4gICAgci55ID0gcC55O1xuICB9IGVsc2Uge1xuICAgIHZhciBjb3N6LCBzaW56O1xuICAgIHNpbnogPSAxIC0gcmggKiByaCAqIHRoaXMucGZhY3Q7XG4gICAgc2lueiA9ICh0aGlzLnAgLSBNYXRoLnNxcnQoc2lueikpIC8gKHRoaXMucG4xIC8gcmggKyByaCAvIHRoaXMucG4xKTtcbiAgICBjb3N6ID0gTWF0aC5zcXJ0KDEgLSBzaW56ICogc2lueik7XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICAgIGNhc2UgbW9kZS5PQkxJUTpcbiAgICAgICAgci55ID0gTWF0aC5hc2luKGNvc3ogKiB0aGlzLnNpbnBoMCArIHAueSAqIHNpbnogKiB0aGlzLmNvc3BoMCAvIHJoKTtcbiAgICAgICAgcC55ID0gKGNvc3ogLSB0aGlzLnNpbnBoMCAqIE1hdGguc2luKHIueSkpICogcmg7XG4gICAgICAgIHAueCAqPSBzaW56ICogdGhpcy5jb3NwaDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBtb2RlLkVRVUlUOlxuICAgICAgICByLnkgPSBNYXRoLmFzaW4ocC55ICogc2lueiAvIHJoKTtcbiAgICAgICAgcC55ID0gY29zeiAqIHJoO1xuICAgICAgICBwLnggKj0gc2luejtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG1vZGUuTl9QT0xFOlxuICAgICAgICByLnkgPSBNYXRoLmFzaW4oY29zeik7XG4gICAgICAgIHAueSA9IC1wLnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBtb2RlLlNfUE9MRTpcbiAgICAgICAgci55ID0gLU1hdGguYXNpbihjb3N6KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHIueCA9IE1hdGguYXRhbjIocC54LCBwLnkpO1xuICB9XG5cbiAgcC54ID0gci54ICsgdGhpcy5sb25nMDtcbiAgcC55ID0gci55O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIlRpbHRlZF9QZXJzcGVjdGl2ZVwiLCBcInRwZXJzXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgdG1lcmMgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvdG1lcmMnO1xuaW1wb3J0IGV0bWVyYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9ldG1lcmMnO1xuaW1wb3J0IHV0bSBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy91dG0nO1xuaW1wb3J0IHN0ZXJlYSBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9zdGVyZWEnO1xuaW1wb3J0IHN0ZXJlIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3N0ZXJlJztcbmltcG9ydCBzb21lcmMgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvc29tZXJjJztcbmltcG9ydCBvbWVyYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9vbWVyYyc7XG5pbXBvcnQgbGNjIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2xjYyc7XG5pbXBvcnQga3JvdmFrIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2tyb3Zhayc7XG5pbXBvcnQgY2FzcyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9jYXNzJztcbmltcG9ydCBsYWVhIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2xhZWEnO1xuaW1wb3J0IGFlYSBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9hZWEnO1xuaW1wb3J0IGdub20gZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvZ25vbSc7XG5pbXBvcnQgY2VhIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2NlYSc7XG5pbXBvcnQgZXFjIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2VxYyc7XG5pbXBvcnQgcG9seSBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9wb2x5JztcbmltcG9ydCBuem1nIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL256bWcnO1xuaW1wb3J0IG1pbGwgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbWlsbCc7XG5pbXBvcnQgc2ludSBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9zaW51JztcbmltcG9ydCBtb2xsIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL21vbGwnO1xuaW1wb3J0IGVxZGMgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvZXFkYyc7XG5pbXBvcnQgdmFuZGcgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvdmFuZGcnO1xuaW1wb3J0IGFlcWQgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvYWVxZCc7XG5pbXBvcnQgb3J0aG8gZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvb3J0aG8nO1xuaW1wb3J0IHFzYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9xc2MnO1xuaW1wb3J0IHJvYmluIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3JvYmluJztcbmltcG9ydCBnZW9jZW50IGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2dlb2NlbnQnO1xuaW1wb3J0IHRwZXJzIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3RwZXJzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHByb2o0KXtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQodG1lcmMpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChldG1lcmMpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZCh1dG0pO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChzdGVyZWEpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChzdGVyZSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHNvbWVyYyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKG9tZXJjKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQobGNjKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoa3JvdmFrKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoY2Fzcyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGxhZWEpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChhZWEpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChnbm9tKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoY2VhKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoZXFjKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQocG9seSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKG56bWcpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChtaWxsKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoc2ludSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKG1vbGwpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChlcWRjKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQodmFuZGcpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChhZXFkKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQob3J0aG8pO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChxc2MpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChyb2Jpbik7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGdlb2NlbnQpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZCh0cGVycyk7XG59IiwiaW1wb3J0IHByb2o0IGZyb20gJy4vY29yZSc7XG5pbXBvcnQgUHJvaiBmcm9tIFwiLi9Qcm9qXCI7XG5pbXBvcnQgUG9pbnQgZnJvbSBcIi4vUG9pbnRcIjtcbmltcG9ydCBjb21tb24gZnJvbSBcIi4vY29tbW9uL3RvUG9pbnRcIjtcbmltcG9ydCBkZWZzIGZyb20gXCIuL2RlZnNcIjtcbmltcG9ydCB0cmFuc2Zvcm0gZnJvbSBcIi4vdHJhbnNmb3JtXCI7XG5pbXBvcnQgbWdycyBmcm9tIFwibWdyc1wiO1xuaW1wb3J0IGluY2x1ZGVkUHJvamVjdGlvbnMgZnJvbSBcIi4uL3Byb2pzXCI7XG5cbnByb2o0LmRlZmF1bHREYXR1bSA9ICdXR1M4NCc7IC8vZGVmYXVsdCBkYXR1bVxucHJvajQuUHJvaiA9IFByb2o7XG5wcm9qNC5XR1M4NCA9IG5ldyBwcm9qNC5Qcm9qKCdXR1M4NCcpO1xucHJvajQuUG9pbnQgPSBQb2ludDtcbnByb2o0LnRvUG9pbnQgPSBjb21tb247XG5wcm9qNC5kZWZzID0gZGVmcztcbnByb2o0LnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbnByb2o0Lm1ncnMgPSBtZ3JzO1xucHJvajQudmVyc2lvbiA9ICdfX1ZFUlNJT05fXyc7XG5pbmNsdWRlZFByb2plY3Rpb25zKHByb2o0KTtcbmV4cG9ydCBkZWZhdWx0IHByb2o0O1xuIiwiaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0Jztcbi8vIERldmVsb3BtZW50IHRvb2xzXG4vLyBNYXAgYXBwbGljYXRpb24gd2l0aCBjb29yZGluYXRlcyBwcm9qZWN0aW9uXG4vLyBodHRwczovL2RvbWlub2M5MjUtcGFnZXMuYXBwc3BvdC5jb20vbWFwcGxldHMvY3NfZWNlZi5odG1sXG4vLyBUaGUgV29ybGQgY29vcmRpbmF0ZXMgY29udmVydGVyXG4vLyBodHRwczovL3R3Y2MuZnIvI1xuZXhwb3J0IGNvbnN0IFByb2plY3Rpb25zID0gW1xuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKExhbWJlcnQtOTMpXCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvcmdmOTMtbGFtYmVydC05My9cIixcbiAgICAgICAgY29kZTogXCJFUFNHOjIxNTRcIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00OSArbGF0XzI9NDQgK2xhdF8wPTQ2LjUgK2xvbl8wPTMgK3hfMD03MDAwMDAgK3lfMD02NjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKENDNTApXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzozOTUwXCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMzk1MC9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00OS4yNSArbGF0XzI9NTAuNzUgK2xhdF8wPTUwICtsb25fMD0zICt4XzA9MTcwMDAwMCAreV8wPTkyMDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M0OSlcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NDlcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTQ5L1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ4LjI1ICtsYXRfMj00OS43NSArbGF0XzA9NDkgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9ODIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJHRjkzIChDQzQ4KVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mzk0OFwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzM5NDgvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDcuMjUgK2xhdF8yPTQ4Ljc1ICtsYXRfMD00OCArbG9uXzA9MyAreF8wPTE3MDAwMDAgK3lfMD03MjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKENDNDcpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzozOTQ3XCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMzk0Ny9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00Ni4yNSArbGF0XzI9NDcuNzUgK2xhdF8wPTQ3ICtsb25fMD0zICt4XzA9MTcwMDAwMCAreV8wPTYyMDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M0NilcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NDZcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTQ2L1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ1LjI1ICtsYXRfMj00Ni43NSArbGF0XzA9NDYgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9NTIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJHRjkzIChDQzQ1KVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mzk0NVwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzM5NDUvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDQuMjUgK2xhdF8yPTQ1Ljc1ICtsYXRfMD00NSArbG9uXzA9MyAreF8wPTE3MDAwMDAgK3lfMD00MjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKENDNDQpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzozOTQ0XCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMzk0NC9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00My4yNSArbGF0XzI9NDQuNzUgK2xhdF8wPTQ0ICtsb25fMD0zICt4XzA9MTcwMDAwMCAreV8wPTMyMDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M0MylcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NDNcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTQzL1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQyLjI1ICtsYXRfMj00My43NSArbGF0XzA9NDMgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9MjIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJHRjkzIChDQzQyKVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mzk0MlwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzM5NDIvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDEuMjUgK2xhdF8yPTQyLjc1ICtsYXRfMD00MiArbG9uXzA9MyAreF8wPTE3MDAwMDAgK3lfMD0xMjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiTlRGIChMYW1iZXJ0IElJKVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mjc1NzJcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8yNzU3Mi9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00Ni44ICtsYXRfMD00Ni44ICtsb25fMD0wICtrXzA9MC45OTk4Nzc0MiAreF8wPTYwMDAwMCAreV8wPTIyMDAwMDAgK2E9NjM3ODI0OS4yICtiPTYzNTY1MTUgK3Rvd2dzODQ9LTE2OCwtNjAsMzIwLDAsMCwwLDAgK3BtPXBhcmlzICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiTlRGIChMYW1iZXJ0IElJSSlcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjI3NTczXCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMjc1NzMvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDQuMTAwMDAwMDAwMDAwMDEgK2xhdF8wPTQ0LjEwMDAwMDAwMDAwMDAxICtsb25fMD0wICtrXzA9MC45OTk4Nzc0OTkgK3hfMD02MDAwMDAgK3lfMD0zMjAwMDAwICthPTYzNzgyNDkuMiArYj02MzU2NTE1ICt0b3dnczg0PS0xNjgsLTYwLDMyMCwwLDAsMCwwICtwbT1wYXJpcyArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIk5URlwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6NDI3NVwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzQyNzUvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxvbmdsYXQgK2E9NjM3ODI0OS4yICtiPTYzNTY1MTUgK3Rvd2dzODQ9LTE2OCwtNjAsMzIwLDAsMCwwLDAgK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJXR1M4NFwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6NDMyNlwiLFxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9lcHNnLmlvLzQzMjZcIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bG9uZ2xhdCArZGF0dW09V0dTODQgK25vX2RlZnNcIlxuICAgIH1cbl07XG5leHBvcnQgY29uc3QgUHJvajREZWZzID0gUHJvamVjdGlvbnMubWFwKHAgPT4gW3AuY29kZSwgcC5wcm9qNF0pO1xucHJvajQuZGVmcyhQcm9qNERlZnMpO1xuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3QoZnJvbSwgdG8sIHksIHgpIHtcbiAgICBjb25zb2xlLmxvZyhgUHJvamVjdGluZyBjb29yZGluYXRlcyAnJHt4fSwke3l9JyBmcm9tICcke2Zyb219JyB0byAnJHt0b30nYCk7XG4gICAgY29uc3QgY29vcmRzID0gcHJvajQoZnJvbSwgdG8sIFt4LCB5XSk7XG4gICAgcmV0dXJuIHsgeDogY29vcmRzWzBdLCB5OiBjb29yZHNbMV0gfTtcbn1cbjtcbi8vIFZvaXIgaHR0cHM6Ly9nZW9kZXNpZS5pZ24uZnIvY29udGVudS9maWNoaWVycy9kb2N1bWVudGF0aW9uL3BlZGFnb2dpcXVlcy9UcmFuc2Zvcm1hdGlvbnNDb29yZG9ubmVlc0dlb2Rlc2lxdWVzLnBkZlxuZXhwb3J0IGNvbnN0IFdHUzg0RWxsaXBzb2lkID0gY3JlYXRlRWxsaXBzb2lkKDYzNzgxMzcsIDEgLyAyOTguMjU3MjIzNTYzKTtcbmZ1bmN0aW9uIGNyZWF0ZUVsbGlwc29pZChhLCBmKSB7XG4gICAgY29uc3QgYiA9IGEgKiAoMSAtIGYpO1xuICAgIGNvbnN0IGFzcXIgPSBhICogYTtcbiAgICBjb25zdCBic3FyID0gYiAqIGI7XG4gICAgY29uc3QgZSA9IE1hdGguc3FydCgoYXNxciAtIGJzcXIpIC8gYXNxcik7XG4gICAgY29uc3QgZXByaW1lID0gTWF0aC5zcXJ0KChhc3FyIC0gYnNxcikgLyBic3FyKTtcbiAgICByZXR1cm4geyBhLCBmLCBiLCBlLCBic3FyLCBhc3FyLCBlcHJpbWUgfTtcbn1cbmZ1bmN0aW9uIGRlZ3JlZXMoYW5nbGUpIHtcbiAgICByZXR1cm4gYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSk7XG59XG5leHBvcnQgZnVuY3Rpb24gWFladG9MTEEoeCwgeSwgeiwgZWxsaXBzb2lkKSB7XG4gICAgY29uc3QgcCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICBjb25zdCB0aGV0YSA9IE1hdGguYXRhbigoeiAqIGVsbGlwc29pZC5hKSAvIChwICogZWxsaXBzb2lkLmIpKTtcbiAgICBjb25zdCBzaW50aGV0YSA9IE1hdGguc2luKHRoZXRhKTtcbiAgICBjb25zdCBjb3N0aGV0YSA9IE1hdGguY29zKHRoZXRhKTtcbiAgICBjb25zdCBudW0gPSB6ICsgZWxsaXBzb2lkLmVwcmltZSAqIGVsbGlwc29pZC5lcHJpbWUgKiBlbGxpcHNvaWQuYiAqIHNpbnRoZXRhICogc2ludGhldGEgKiBzaW50aGV0YTtcbiAgICBjb25zdCBkZW5vbSA9IHAgLSBlbGxpcHNvaWQuZSAqIGVsbGlwc29pZC5lICogZWxsaXBzb2lkLmEgKiBjb3N0aGV0YSAqIGNvc3RoZXRhICogY29zdGhldGE7XG4gICAgY29uc3QgbGF0ID0gTWF0aC5hdGFuKG51bSAvIGRlbm9tKTtcbiAgICBsZXQgbG9uID0gTWF0aC5hdGFuKHkgLyB4KTtcbiAgICBjb25zdCBuID0gZ2V0TihsYXQsIGVsbGlwc29pZCk7XG4gICAgY29uc3QgYWx0ID0gKHAgLyBNYXRoLmNvcyhsYXQpKSAtIG47XG4gICAgaWYgKHggPCAwICYmIHkgPCAwKSB7XG4gICAgICAgIGxvbiA9IGxvbiAtIE1hdGguUEk7XG4gICAgfVxuICAgIGlmICh4IDwgMCAmJiB5ID4gMCkge1xuICAgICAgICBsb24gPSBsb24gKyBNYXRoLlBJO1xuICAgIH1cbiAgICByZXR1cm4geyBsYXRpdHVkZTogZGVncmVlcyhsYXQpLCBsb25naXR1ZGU6IGRlZ3JlZXMobG9uKSwgYWx0aXR1ZGU6IGFsdCB9O1xufVxuZnVuY3Rpb24gZ2V0TihsYXQsIGVsbGlwc29pZCkge1xuICAgIGNvbnN0IHNpbmxhdCA9IE1hdGguc2luKGxhdCk7XG4gICAgY29uc3QgZGVub20gPSBNYXRoLnNxcnQoMSAtIGVsbGlwc29pZC5lICogZWxsaXBzb2lkLmUgKiBzaW5sYXQgKiBzaW5sYXQpO1xuICAgIGNvbnN0IG4gPSBlbGxpcHNvaWQuYSAvIGRlbm9tO1xuICAgIHJldHVybiBuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIExMQXRvWFlaKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFsdGl0dWRlLCBlbGxpcHNvaWQpIHtcbiAgICBjb25zdCBjb3NMYXQgPSBNYXRoLmNvcyhsYXRpdHVkZSAqIE1hdGguUEkgLyAxODAuMCk7XG4gICAgY29uc3Qgc2luTGF0ID0gTWF0aC5zaW4obGF0aXR1ZGUgKiBNYXRoLlBJIC8gMTgwLjApO1xuICAgIGNvbnN0IGNvc0xvbiA9IE1hdGguY29zKGxvbmdpdHVkZSAqIE1hdGguUEkgLyAxODAuMCk7XG4gICAgY29uc3Qgc2luTG9uID0gTWF0aC5zaW4obG9uZ2l0dWRlICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgICBjb25zdCByYWQgPSBlbGxpcHNvaWQuYTtcbiAgICBjb25zdCBmID0gZWxsaXBzb2lkLmY7XG4gICAgY29uc3QgQyA9IDEuMCAvIE1hdGguc3FydChjb3NMYXQgKiBjb3NMYXQgKyAoMSAtIGYpICogKDEgLSBmKSAqIHNpbkxhdCAqIHNpbkxhdCk7XG4gICAgY29uc3QgUyA9ICgxLjAgLSBmKSAqICgxLjAgLSBmKSAqIEM7XG4gICAgY29uc3QgaCA9IGFsdGl0dWRlO1xuICAgIGNvbnN0IHggPSAocmFkICogQyArIGgpICogY29zTGF0ICogY29zTG9uO1xuICAgIGNvbnN0IHkgPSAocmFkICogQyArIGgpICogY29zTGF0ICogc2luTG9uO1xuICAgIGNvbnN0IHogPSAocmFkICogUyArIGgpICogc2luTGF0O1xuICAgIHJldHVybiB7IHgsIHksIHogfTtcbn1cbiIsImltcG9ydCByYW5kb21Db2xvciBmcm9tICdyYW5kb21jb2xvcic7XG5pbXBvcnQgeyBwb2x5Z29uIH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcChvYmosIC4uLnByb3BzKSB7XG4gICAgaWYgKHByb3BzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgYXQgbGVhc3QgcHJvdmlkZSBvbmUgcHJvcGVydHkuXCIpO1xuICAgIGNvbnN0IHByb3AgPSBwcm9wcy5zaGlmdCgpO1xuICAgIGNvbnN0IGV4aXN0cyA9IG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKTtcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBleGlzdHMgPyBvYmpbcHJvcF0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChvYmpbcHJvcF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0UHJvcChvYmpbcHJvcF0sIC4uLnByb3BzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlcXVlbmNlKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFxyP1xcbj9cXHQ/L2csICcnKS5zcGxpdCgnICcpO1xufVxuY29uc3QgY29sb3JzID0ge307XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3Ioa2V5LCBvcHRzKSB7XG4gICAgaWYgKGtleSBpbiBjb2xvcnMpIHtcbiAgICAgICAgcmV0dXJuIGNvbG9yc1trZXldO1xuICAgIH1cbiAgICBjb25zdCBjb2xvciA9IHJhbmRvbUNvbG9yKG9wdHMpO1xuICAgIGNvbG9yc1trZXldID0gY29sb3I7XG4gICAgcmV0dXJuIGNvbG9yO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvUmFkaWFucyhhbmdsZUluRGVncmVlcykge1xuICAgIHJldHVybiBhbmdsZUluRGVncmVlcyAqIE1hdGguUEkgLyAxODA7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9EZWdyZWVzKGFuZ2xlSW5SYWRpYW5zKSB7XG4gICAgcmV0dXJuIGFuZ2xlSW5SYWRpYW5zICogMTgwIC8gTWF0aC5QSTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjaXJjbGVUb1BvbHlnb24oY2VudGVyLCByYWRpdXMsIG51bWJlck9mU2VnbWVudHMsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBuID0gbnVtYmVyT2ZTZWdtZW50cyA/IG51bWJlck9mU2VnbWVudHMgOiAzMjtcbiAgICBjb25zdCBmbGF0Q29vcmRpbmF0ZXMgPSBbXTtcbiAgICBjb25zdCBjb29yZGluYXRlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGZsYXRDb29yZGluYXRlcy5wdXNoKC4uLm9mZnNldChjZW50ZXIsIHJhZGl1cywgMiAqIE1hdGguUEkgKiBpIC8gbikpO1xuICAgIH1cbiAgICBmbGF0Q29vcmRpbmF0ZXMucHVzaChmbGF0Q29vcmRpbmF0ZXNbMF0sIGZsYXRDb29yZGluYXRlc1sxXSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBqIDwgZmxhdENvb3JkaW5hdGVzLmxlbmd0aDsgaiArPSAyKSB7XG4gICAgICAgIGNvb3JkaW5hdGVzW2krK10gPSBmbGF0Q29vcmRpbmF0ZXMuc2xpY2UoaiwgaiArIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcG9seWdvbihbY29vcmRpbmF0ZXMucmV2ZXJzZSgpXSwgcHJvcGVydGllcyk7XG59XG47XG5leHBvcnQgZnVuY3Rpb24gb2Zmc2V0KGMxLCBkaXN0YW5jZSwgYmVhcmluZykge1xuICAgIGNvbnN0IGxhdDEgPSB0b1JhZGlhbnMoYzFbMV0pO1xuICAgIGNvbnN0IGxvbjEgPSB0b1JhZGlhbnMoYzFbMF0pO1xuICAgIGNvbnN0IGRCeVIgPSBkaXN0YW5jZSAvIDYzNzgxMzc7IC8vIGRpc3RhbmNlIGRpdmlkZWQgYnkgNjM3ODEzNyAocmFkaXVzIG9mIHRoZSBlYXJ0aCkgd2dzODRcbiAgICBjb25zdCBsYXQgPSBNYXRoLmFzaW4oTWF0aC5zaW4obGF0MSkgKiBNYXRoLmNvcyhkQnlSKSArXG4gICAgICAgIE1hdGguY29zKGxhdDEpICogTWF0aC5zaW4oZEJ5UikgKiBNYXRoLmNvcyhiZWFyaW5nKSk7XG4gICAgY29uc3QgbG9uID0gbG9uMSArIE1hdGguYXRhbjIoTWF0aC5zaW4oYmVhcmluZykgKiBNYXRoLnNpbihkQnlSKSAqIE1hdGguY29zKGxhdDEpLCBNYXRoLmNvcyhkQnlSKSAtIE1hdGguc2luKGxhdDEpICogTWF0aC5zaW4obGF0KSk7XG4gICAgcmV0dXJuIFt0b0RlZ3JlZXMobG9uKSwgdG9EZWdyZWVzKGxhdCldO1xufVxuIiwiaW1wb3J0IHsgZmVhdHVyZSwgaXNPYmplY3QsIGxpbmVTdHJpbmcsIHBvaW50IH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGNvb3JkRWFjaFxuICpcbiAqIEBjYWxsYmFjayBjb29yZEVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjdXJyZW50Q29vcmQgVGhlIGN1cnJlbnQgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29vcmRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGNvb3JkaW5hdGVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBjb29yZEVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4Y2x1ZGVXcmFwQ29vcmQ9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIGZpbmFsIGNvb3JkaW5hdGUgb2YgTGluZWFyUmluZ3MgdGhhdCB3cmFwcyB0aGUgcmluZyBpbiBpdHMgaXRlcmF0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmNvb3JkRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1jdXJyZW50Q29vcmRcbiAqICAgLy89Y29vcmRJbmRleFxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGNvb3JkRWFjaChnZW9qc29uLCBjYWxsYmFjaywgZXhjbHVkZVdyYXBDb29yZCkge1xuICAgIC8vIEhhbmRsZXMgbnVsbCBHZW9tZXRyeSAtLSBTa2lwcyB0aGlzIEdlb0pTT05cbiAgICBpZiAoZ2VvanNvbiA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHZhciBqLCBrLCBsLCBnZW9tZXRyeSwgc3RvcEcsIGNvb3JkcyxcbiAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24sXG4gICAgICAgIHdyYXBTaHJpbmsgPSAwLFxuICAgICAgICBjb29yZEluZGV4ID0gMCxcbiAgICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24sXG4gICAgICAgIHR5cGUgPSBnZW9qc29uLnR5cGUsXG4gICAgICAgIGlzRmVhdHVyZUNvbGxlY3Rpb24gPSB0eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICBpc0ZlYXR1cmUgPSB0eXBlID09PSAnRmVhdHVyZScsXG4gICAgICAgIHN0b3AgPSBpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggOiAxO1xuXG4gICAgLy8gVGhpcyBsb2dpYyBtYXkgbG9vayBhIGxpdHRsZSB3ZWlyZC4gVGhlIHJlYXNvbiB3aHkgaXQgaXMgdGhhdCB3YXlcbiAgICAvLyBpcyBiZWNhdXNlIGl0J3MgdHJ5aW5nIHRvIGJlIGZhc3QuIEdlb0pTT04gc3VwcG9ydHMgbXVsdGlwbGUga2luZHNcbiAgICAvLyBvZiBvYmplY3RzIGF0IGl0cyByb290OiBGZWF0dXJlQ29sbGVjdGlvbiwgRmVhdHVyZXMsIEdlb21ldHJpZXMuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGhhbmRsaW5nIGFsbCBvZiB0aGVtLCBhbmQgdGhhdFxuICAgIC8vIG1lYW5zIHRoYXQgc29tZSBvZiB0aGUgYGZvcmAgbG9vcHMgeW91IHNlZSBiZWxvdyBhY3R1YWxseSBqdXN0IGRvbid0IGFwcGx5XG4gICAgLy8gdG8gY2VydGFpbiBpbnB1dHMuIEZvciBpbnN0YW5jZSwgaWYgeW91IGdpdmUgdGhpcyBqdXN0IGFcbiAgICAvLyBQb2ludCBnZW9tZXRyeSwgdGhlbiBib3RoIGxvb3BzIGFyZSBzaG9ydC1jaXJjdWl0ZWQgYW5kIGFsbCB3ZSBkb1xuICAgIC8vIGlzIGdyYWR1YWxseSByZW5hbWUgdGhlIGlucHV0IHVudGlsIGl0J3MgY2FsbGVkICdnZW9tZXRyeScuXG4gICAgLy9cbiAgICAvLyBUaGlzIGFsc28gYWltcyB0byBhbGxvY2F0ZSBhcyBmZXcgcmVzb3VyY2VzIGFzIHBvc3NpYmxlOiBqdXN0IGFcbiAgICAvLyBmZXcgbnVtYmVycyBhbmQgYm9vbGVhbnMsIHJhdGhlciB0aGFuIGFueSB0ZW1wb3JhcnkgYXJyYXlzIGFzIHdvdWxkXG4gICAgLy8gYmUgcmVxdWlyZWQgd2l0aCB0aGUgbm9ybWFsaXphdGlvbiBhcHByb2FjaC5cbiAgICBmb3IgKHZhciBmZWF0dXJlSW5kZXggPSAwOyBmZWF0dXJlSW5kZXggPCBzdG9wOyBmZWF0dXJlSW5kZXgrKykge1xuICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbiA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tmZWF0dXJlSW5kZXhdLmdlb21ldHJ5IDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLmdlb21ldHJ5IDogZ2VvanNvbikpO1xuICAgICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbiA9IChnZW9tZXRyeU1heWJlQ29sbGVjdGlvbikgPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi50eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJyA6IGZhbHNlO1xuICAgICAgICBzdG9wRyA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllcy5sZW5ndGggOiAxO1xuXG4gICAgICAgIGZvciAodmFyIGdlb21JbmRleCA9IDA7IGdlb21JbmRleCA8IHN0b3BHOyBnZW9tSW5kZXgrKykge1xuICAgICAgICAgICAgdmFyIG11bHRpRmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeUluZGV4ID0gMDtcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gP1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXNbZ2VvbUluZGV4XSA6IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGVzIG51bGwgR2VvbWV0cnkgLS0gU2tpcHMgdGhpcyBnZW9tZXRyeVxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvb3JkcyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgICAgICAgdmFyIGdlb21UeXBlID0gZ2VvbWV0cnkudHlwZTtcblxuICAgICAgICAgICAgd3JhcFNocmluayA9IChleGNsdWRlV3JhcENvb3JkICYmIChnZW9tVHlwZSA9PT0gJ1BvbHlnb24nIHx8IGdlb21UeXBlID09PSAnTXVsdGlQb2x5Z29uJykpID8gMSA6IDA7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2VvbVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICAgICAgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzW2pdLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdNdWx0aVBvaW50JykgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnTGluZVN0cmluZycpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY29vcmRzW2pdLmxlbmd0aCAtIHdyYXBTaHJpbms7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXVtrXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnUG9seWdvbicpIGdlb21ldHJ5SW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnUG9seWdvbicpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnTXVsdGlQb2x5Z29uJykgZ2VvbWV0cnlJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb29yZHNbal0ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IDA7IGwgPCBjb29yZHNbal1ba10ubGVuZ3RoIC0gd3JhcFNocmluazsgbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXVtrXVtsXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnlJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvb3JkRWFjaChnZW9tZXRyeS5nZW9tZXRyaWVzW2pdLCBjYWxsYmFjaywgZXhjbHVkZVdyYXBDb29yZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBHZW9tZXRyeSBUeXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGNvb3JkUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgY29vcmRSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY3VycmVudENvb3JkIFRoZSBjdXJyZW50IGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvb3JkSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogU3RhcnRzIGF0IGluZGV4IDAsIGlmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCwgYW5kIGF0IGluZGV4IDEgb3RoZXJ3aXNlLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBjb29yZGluYXRlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKClcbiAqXG4gKiBAbmFtZSBjb29yZFJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxHZW9tZXRyeXxGZWF0dXJlfSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudENvb3JkLCBjb29yZEluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2V4Y2x1ZGVXcmFwQ29vcmQ9ZmFsc2VdIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIGZpbmFsIGNvb3JkaW5hdGUgb2YgTGluZWFyUmluZ3MgdGhhdCB3cmFwcyB0aGUgcmluZyBpbiBpdHMgaXRlcmF0aW9uLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7XCJmb29cIjogXCJiYXJcIn0pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7XCJoZWxsb1wiOiBcIndvcmxkXCJ9KVxuICogXSk7XG4gKlxuICogdHVyZi5jb29yZFJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRDb29yZFxuICogICAvLz1jb29yZEluZGV4XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50Q29vcmQ7XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gY29vcmRSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSwgZXhjbHVkZVdyYXBDb29yZCkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGNvb3JkRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gICAgICAgIGlmIChjb29yZEluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudENvb3JkO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpO1xuICAgIH0sIGV4Y2x1ZGVXcmFwQ29vcmQpO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBwcm9wRWFjaFxuICpcbiAqIEBjYWxsYmFjayBwcm9wRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge09iamVjdH0gY3VycmVudFByb3BlcnRpZXMgVGhlIGN1cnJlbnQgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBwcm9wZXJ0aWVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBwcm9wRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYucHJvcEVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIHByb3BFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgdmFyIGk7XG4gICAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzLCBpKSA9PT0gZmFsc2UpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0ZlYXR1cmUnOlxuICAgICAgICBjYWxsYmFjayhnZW9qc29uLnByb3BlcnRpZXMsIDApO1xuICAgICAgICBicmVhaztcbiAgICB9XG59XG5cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgcHJvcFJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIHByb3BSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7Kn0gY3VycmVudFByb3BlcnRpZXMgVGhlIGN1cnJlbnQgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBwcm9wZXJ0aWVzIGluIGFueSBHZW9KU09OIG9iamVjdCBpbnRvIGEgc2luZ2xlIHZhbHVlLFxuICogc2ltaWxhciB0byBob3cgQXJyYXkucmVkdWNlIHdvcmtzLiBIb3dldmVyLCBpbiB0aGlzIGNhc2Ugd2UgbGF6aWx5IHJ1blxuICogdGhlIHJlZHVjdGlvbiwgc28gYW4gYXJyYXkgb2YgYWxsIHByb3BlcnRpZXMgaXMgdW5uZWNlc3NhcnkuXG4gKlxuICogQG5hbWUgcHJvcFJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5wcm9wUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICByZXR1cm4gY3VycmVudFByb3BlcnRpZXNcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBwcm9wUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBwcm9wRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudFByb3BlcnRpZXM7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBmZWF0dXJlRWFjaFxuICpcbiAqIEBjYWxsYmFjayBmZWF0dXJlRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8YW55Pn0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG9cbiAqIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgZmVhdHVyZUVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmVhdHVyZUVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgaWYgKGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIGNhbGxiYWNrKGdlb2pzb24sIDApO1xuICAgIH0gZWxzZSBpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb2pzb24uZmVhdHVyZXNbaV0sIGkpID09PSBmYWxzZSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZlYXR1cmVSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBmZWF0dXJlUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGZlYXR1cmVSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7XCJmb29cIjogXCJiYXJcIn0pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7XCJoZWxsb1wiOiBcIndvcmxkXCJ9KVxuICogXSk7XG4gKlxuICogdHVyZi5mZWF0dXJlUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICByZXR1cm4gY3VycmVudEZlYXR1cmVcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBmZWF0dXJlUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBmZWF0dXJlRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudEZlYXR1cmU7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIEdldCBhbGwgY29vcmRpbmF0ZXMgZnJvbSBhbnkgR2VvSlNPTiBvYmplY3QuXG4gKlxuICogQG5hbWUgY29vcmRBbGxcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZSBwb3NpdGlvbiBhcnJheVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdmFyIGNvb3JkcyA9IHR1cmYuY29vcmRBbGwoZmVhdHVyZXMpO1xuICogLy89IFtbMjYsIDM3XSwgWzM2LCA1M11dXG4gKi9cbmZ1bmN0aW9uIGNvb3JkQWxsKGdlb2pzb24pIHtcbiAgICB2YXIgY29vcmRzID0gW107XG4gICAgY29vcmRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjb29yZCkge1xuICAgICAgICBjb29yZHMucHVzaChjb29yZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZ2VvbUVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgZ2VvbUVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtHZW9tZXRyeX0gY3VycmVudEdlb21ldHJ5IFRoZSBjdXJyZW50IEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmVQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IEZlYXR1cmUgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGZlYXR1cmVCQm94IFRoZSBjdXJyZW50IEZlYXR1cmUgQkJveCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGZlYXR1cmVJZCBUaGUgY3VycmVudCBGZWF0dXJlIElkIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIGdlb21ldHJ5IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqXG4gKiBAbmFtZSBnZW9tRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5nZW9tRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkge1xuICogICAvLz1jdXJyZW50R2VvbWV0cnlcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPWZlYXR1cmVQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVCQm94XG4gKiAgIC8vPWZlYXR1cmVJZFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGdlb21FYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgdmFyIGksIGosIGcsIGdlb21ldHJ5LCBzdG9wRyxcbiAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24sXG4gICAgICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uLFxuICAgICAgICBmZWF0dXJlUHJvcGVydGllcyxcbiAgICAgICAgZmVhdHVyZUJCb3gsXG4gICAgICAgIGZlYXR1cmVJZCxcbiAgICAgICAgZmVhdHVyZUluZGV4ID0gMCxcbiAgICAgICAgaXNGZWF0dXJlQ29sbGVjdGlvbiA9IGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgaXNGZWF0dXJlID0gZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScsXG4gICAgICAgIHN0b3AgPSBpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggOiAxO1xuXG4gICAgLy8gVGhpcyBsb2dpYyBtYXkgbG9vayBhIGxpdHRsZSB3ZWlyZC4gVGhlIHJlYXNvbiB3aHkgaXQgaXMgdGhhdCB3YXlcbiAgICAvLyBpcyBiZWNhdXNlIGl0J3MgdHJ5aW5nIHRvIGJlIGZhc3QuIEdlb0pTT04gc3VwcG9ydHMgbXVsdGlwbGUga2luZHNcbiAgICAvLyBvZiBvYmplY3RzIGF0IGl0cyByb290OiBGZWF0dXJlQ29sbGVjdGlvbiwgRmVhdHVyZXMsIEdlb21ldHJpZXMuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGhhbmRsaW5nIGFsbCBvZiB0aGVtLCBhbmQgdGhhdFxuICAgIC8vIG1lYW5zIHRoYXQgc29tZSBvZiB0aGUgYGZvcmAgbG9vcHMgeW91IHNlZSBiZWxvdyBhY3R1YWxseSBqdXN0IGRvbid0IGFwcGx5XG4gICAgLy8gdG8gY2VydGFpbiBpbnB1dHMuIEZvciBpbnN0YW5jZSwgaWYgeW91IGdpdmUgdGhpcyBqdXN0IGFcbiAgICAvLyBQb2ludCBnZW9tZXRyeSwgdGhlbiBib3RoIGxvb3BzIGFyZSBzaG9ydC1jaXJjdWl0ZWQgYW5kIGFsbCB3ZSBkb1xuICAgIC8vIGlzIGdyYWR1YWxseSByZW5hbWUgdGhlIGlucHV0IHVudGlsIGl0J3MgY2FsbGVkICdnZW9tZXRyeScuXG4gICAgLy9cbiAgICAvLyBUaGlzIGFsc28gYWltcyB0byBhbGxvY2F0ZSBhcyBmZXcgcmVzb3VyY2VzIGFzIHBvc3NpYmxlOiBqdXN0IGFcbiAgICAvLyBmZXcgbnVtYmVycyBhbmQgYm9vbGVhbnMsIHJhdGhlciB0aGFuIGFueSB0ZW1wb3JhcnkgYXJyYXlzIGFzIHdvdWxkXG4gICAgLy8gYmUgcmVxdWlyZWQgd2l0aCB0aGUgbm9ybWFsaXphdGlvbiBhcHByb2FjaC5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RvcDsgaSsrKSB7XG5cbiAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24gPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0uZ2VvbWV0cnkgOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24uZ2VvbWV0cnkgOiBnZW9qc29uKSk7XG4gICAgICAgIGZlYXR1cmVQcm9wZXJ0aWVzID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMgOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24ucHJvcGVydGllcyA6IHt9KSk7XG4gICAgICAgIGZlYXR1cmVCQm94ID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmJib3ggOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24uYmJveCA6IHVuZGVmaW5lZCkpO1xuICAgICAgICBmZWF0dXJlSWQgPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0uaWQgOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24uaWQgOiB1bmRlZmluZWQpKTtcbiAgICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24gPSAoZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24pID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24udHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicgOiBmYWxzZTtcbiAgICAgICAgc3RvcEcgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXMubGVuZ3RoIDogMTtcblxuICAgICAgICBmb3IgKGcgPSAwOyBnIDwgc3RvcEc7IGcrKykge1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllc1tnXSA6IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgbnVsbCBHZW9tZXRyeVxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKG51bGwsIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzoge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhnZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdHZW9tZXRyeUNvbGxlY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb21ldHJ5Lmdlb21ldHJpZXNbal0sIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIEdlb21ldHJ5IFR5cGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGluY3JlYXNlIGBmZWF0dXJlSW5kZXhgIHBlciBlYWNoIGZlYXR1cmVcbiAgICAgICAgZmVhdHVyZUluZGV4Kys7XG4gICAgfVxufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBnZW9tUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgZ2VvbVJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtHZW9tZXRyeX0gY3VycmVudEdlb21ldHJ5IFRoZSBjdXJyZW50IEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmVQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IEZlYXR1cmUgUHJvcGVydGllcyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGZlYXR1cmVCQm94IFRoZSBjdXJyZW50IEZlYXR1cmUgQkJveCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGZlYXR1cmVJZCBUaGUgY3VycmVudCBGZWF0dXJlIElkIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBnZW9tZXRyeSBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgZ2VvbVJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmdlb21SZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50R2VvbWV0cnlcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPWZlYXR1cmVQcm9wZXJ0aWVzXG4gKiAgIC8vPWZlYXR1cmVCQm94XG4gKiAgIC8vPWZlYXR1cmVJZFxuICogICByZXR1cm4gY3VycmVudEdlb21ldHJ5XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZ2VvbVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgZ2VvbUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudEdlb21ldHJ5O1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBmbGF0dGVuRWFjaFxuICpcbiAqIEBjYWxsYmFjayBmbGF0dGVuRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IGZsYXR0ZW5lZCBmZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBmbGF0dGVuZWQgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvXG4gKiBBcnJheS5mb3JFYWNoLlxuICpcbiAqIEBuYW1lIGZsYXR0ZW5FYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYubXVsdGlQb2ludChbWzQwLCAzMF0sIFszNiwgNTNdXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmxhdHRlbkVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBmbGF0dGVuRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIGdlb21FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChnZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBwcm9wZXJ0aWVzLCBiYm94LCBpZCkge1xuICAgICAgICAvLyBDYWxsYmFjayBmb3Igc2luZ2xlIGdlb21ldHJ5XG4gICAgICAgIHZhciB0eXBlID0gKGdlb21ldHJ5ID09PSBudWxsKSA/IG51bGwgOiBnZW9tZXRyeS50eXBlO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhmZWF0dXJlKGdlb21ldHJ5LCBwcm9wZXJ0aWVzLCB7YmJveDogYmJveCwgaWQ6IGlkfSksIGZlYXR1cmVJbmRleCwgMCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZ2VvbVR5cGU7XG5cbiAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIG11bHRpLWdlb21ldHJ5XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgICAgIGdlb21UeXBlID0gJ1BvaW50JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICAgICAgZ2VvbVR5cGUgPSAnTGluZVN0cmluZyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgICAgIGdlb21UeXBlID0gJ1BvbHlnb24nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IDA7IG11bHRpRmVhdHVyZUluZGV4IDwgZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoOyBtdWx0aUZlYXR1cmVJbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY29vcmRpbmF0ZSA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzW211bHRpRmVhdHVyZUluZGV4XTtcbiAgICAgICAgICAgIHZhciBnZW9tID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGdlb21UeXBlLFxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcyksIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZsYXR0ZW5SZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBmbGF0dGVuUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmV9IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGZsYXR0ZW5lZCBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgZmxhdHRlblJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5tdWx0aVBvaW50KFtbNDAsIDMwXSwgWzM2LCA1M11dLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mbGF0dGVuUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRGZWF0dXJlXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgZmxhdHRlbkVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgbXVsdGlGZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50RmVhdHVyZTtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBzZWdtZW50RWFjaFxuICpcbiAqIEBjYWxsYmFjayBzZWdtZW50RWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRTZWdtZW50IFRoZSBjdXJyZW50IFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWdtZW50SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgMi12ZXJ0ZXggbGluZSBzZWdtZW50IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5mb3JFYWNoKClcbiAqIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT05cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNTAsIDVdLCBbLTQwLCAtMTBdLCBbLTUwLCAtMTBdLCBbLTQwLCA1XSwgWy01MCwgNV1dXSk7XG4gKlxuICogLy8gSXRlcmF0ZSBvdmVyIEdlb0pTT04gYnkgMi12ZXJ0ZXggc2VnbWVudHNcbiAqIHR1cmYuc2VnbWVudEVhY2gocG9seWdvbiwgZnVuY3Rpb24gKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAqICAgLy89Y3VycmVudFNlZ21lbnRcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgLy89c2VnbWVudEluZGV4XG4gKiB9KTtcbiAqXG4gKiAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50c1xuICogdmFyIHRvdGFsID0gMDtcbiAqIHR1cmYuc2VnbWVudEVhY2gocG9seWdvbiwgZnVuY3Rpb24gKCkge1xuICogICAgIHRvdGFsKys7XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gc2VnbWVudEVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZmVhdHVyZSQkMSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICAgICAgICB2YXIgc2VnbWVudEluZGV4ID0gMDtcblxuICAgICAgICAvLyBFeGNsdWRlIG51bGwgR2VvbWV0cmllc1xuICAgICAgICBpZiAoIWZlYXR1cmUkJDEuZ2VvbWV0cnkpIHJldHVybjtcbiAgICAgICAgLy8gKE11bHRpKVBvaW50IGdlb21ldHJpZXMgZG8gbm90IGNvbnRhaW4gc2VnbWVudHMgdGhlcmVmb3JlIHRoZXkgYXJlIGlnbm9yZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICAgICAgICB2YXIgdHlwZSA9IGZlYXR1cmUkJDEuZ2VvbWV0cnkudHlwZTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSByZXR1cm47XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgMi12ZXJ0ZXggbGluZSBzZWdtZW50c1xuICAgICAgICB2YXIgcHJldmlvdXNDb29yZHM7XG4gICAgICAgIGlmIChjb29yZEVhY2goZmVhdHVyZSQkMSwgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4Q29vcmQsIG11dGxpUGFydEluZGV4Q29vcmQsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIFNpbXVsYXRpbmcgYSBtZXRhLmNvb3JkUmVkdWNlKCkgc2luY2UgYHJlZHVjZWAgb3BlcmF0aW9ucyBjYW5ub3QgYmUgc3RvcHBlZCBieSByZXR1cm5pbmcgYGZhbHNlYFxuICAgICAgICAgICAgaWYgKHByZXZpb3VzQ29vcmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0Nvb3JkcyA9IGN1cnJlbnRDb29yZDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY3VycmVudFNlZ21lbnQgPSBsaW5lU3RyaW5nKFtwcmV2aW91c0Nvb3JkcywgY3VycmVudENvb3JkXSwgZmVhdHVyZSQkMS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHNlZ21lbnRJbmRleCsrO1xuICAgICAgICAgICAgcHJldmlvdXNDb29yZHMgPSBjdXJyZW50Q29vcmQ7XG4gICAgICAgIH0pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBzZWdtZW50UmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgc2VnbWVudFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50U2VnbWVudCBUaGUgY3VycmVudCBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gc2VnbWVudEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBTZWdtZW50IGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSAyLXZlcnRleCBsaW5lIHNlZ21lbnQgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpXG4gKiAoTXVsdGkpUG9pbnQgZ2VvbWV0cmllcyBkbyBub3QgY29udGFpbiBzZWdtZW50cyB0aGVyZWZvcmUgdGhleSBhcmUgaWdub3JlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50U2VnbWVudCwgY3VycmVudEluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWy01MCwgNV0sIFstNDAsIC0xMF0sIFstNTAsIC0xMF0sIFstNDAsIDVdLCBbLTUwLCA1XV1dKTtcbiAqXG4gKiAvLyBJdGVyYXRlIG92ZXIgR2VvSlNPTiBieSAyLXZlcnRleCBzZWdtZW50c1xuICogdHVyZi5zZWdtZW50UmVkdWNlKHBvbHlnb24sIGZ1bmN0aW9uIChwcmV2aW91c1NlZ21lbnQsIGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAqICAgLy89IHByZXZpb3VzU2VnbWVudFxuICogICAvLz0gY3VycmVudFNlZ21lbnRcbiAqICAgLy89IGZlYXR1cmVJbmRleFxuICogICAvLz0gbXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89IGdlb21ldHJ5SW5kZXhcbiAqICAgLy89IHNlZ21lbnRJbmV4XG4gKiAgIHJldHVybiBjdXJyZW50U2VnbWVudFxuICogfSk7XG4gKlxuICogLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHNcbiAqIHZhciBpbml0aWFsVmFsdWUgPSAwXG4gKiB2YXIgdG90YWwgPSB0dXJmLnNlZ21lbnRSZWR1Y2UocG9seWdvbiwgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUpIHtcbiAqICAgICBwcmV2aW91c1ZhbHVlKys7XG4gKiAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG4gKiB9LCBpbml0aWFsVmFsdWUpO1xuICovXG5mdW5jdGlvbiBzZWdtZW50UmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICB2YXIgc3RhcnRlZCA9IGZhbHNlO1xuICAgIHNlZ21lbnRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSB7XG4gICAgICAgIGlmIChzdGFydGVkID09PSBmYWxzZSAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRTZWdtZW50O1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KTtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGxpbmVFYWNoXG4gKlxuICogQGNhbGxiYWNrIGxpbmVFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudExpbmUgVGhlIGN1cnJlbnQgTGluZVN0cmluZ3xMaW5lYXJSaW5nIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWRcbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBsaW5lIG9yIHJpbmcgY29vcmRpbmF0ZXMgaW4gTGluZVN0cmluZywgUG9seWdvbiwgTXVsdGlMaW5lU3RyaW5nLCBNdWx0aVBvbHlnb24gRmVhdHVyZXMgb3IgR2VvbWV0cmllcyxcbiAqIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaC5cbiAqXG4gKiBAbmFtZSBsaW5lRWFjaFxuICogQHBhcmFtIHtHZW9tZXRyeXxGZWF0dXJlPExpbmVTdHJpbmd8UG9seWdvbnxNdWx0aUxpbmVTdHJpbmd8TXVsdGlQb2x5Z29uPn0gZ2VvanNvbiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KVxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbXG4gKiAgIFtbMjYsIDM3XSwgWzM1LCA0NV1dLFxuICogICBbWzM2LCA1M10sIFszOCwgNTBdLCBbNDEsIDU1XV1cbiAqIF0pO1xuICpcbiAqIHR1cmYubGluZUVhY2gobXVsdGlMaW5lLCBmdW5jdGlvbiAoY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89Y3VycmVudExpbmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBsaW5lRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIC8vIHZhbGlkYXRpb25cbiAgICBpZiAoIWdlb2pzb24pIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyByZXF1aXJlZCcpO1xuXG4gICAgZmxhdHRlbkVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGZlYXR1cmUkJDEsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmUkJDEuZ2VvbWV0cnkgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgdmFyIHR5cGUgPSBmZWF0dXJlJCQxLmdlb21ldHJ5LnR5cGU7XG4gICAgICAgIHZhciBjb29yZHMgPSBmZWF0dXJlJCQxLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZmVhdHVyZSQkMSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgMCwgMCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBmb3IgKHZhciBnZW9tZXRyeUluZGV4ID0gMDsgZ2VvbWV0cnlJbmRleCA8IGNvb3Jkcy5sZW5ndGg7IGdlb21ldHJ5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhsaW5lU3RyaW5nKGNvb3Jkc1tnZW9tZXRyeUluZGV4XSwgZmVhdHVyZSQkMS5wcm9wZXJ0aWVzKSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBsaW5lUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgbGluZVJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50TGluZSBUaGUgY3VycmVudCBMaW5lU3RyaW5nfExpbmVhclJpbmcgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWRcbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgbGluZVJlZHVjZVxuICogQHBhcmFtIHtHZW9tZXRyeXxGZWF0dXJlPExpbmVTdHJpbmd8UG9seWdvbnxNdWx0aUxpbmVTdHJpbmd8TXVsdGlQb2x5Z29uPn0gZ2VvanNvbiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQb2x5ID0gdHVyZi5tdWx0aVBvbHlnb24oW1xuICogICB0dXJmLnBvbHlnb24oW1tbMTIsNDhdLFsyLDQxXSxbMjQsMzhdLFsxMiw0OF1dLCBbWzksNDRdLFsxMyw0MV0sWzEzLDQ1XSxbOSw0NF1dXSksXG4gKiAgIHR1cmYucG9seWdvbihbW1s1LCA1XSwgWzAsIDBdLCBbMiwgMl0sIFs0LCA0XSwgWzUsIDVdXV0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmxpbmVSZWR1Y2UobXVsdGlQb2x5LCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50TGluZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogICByZXR1cm4gY3VycmVudExpbmVcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBsaW5lUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBsaW5lRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRMaW5lO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogRmluZHMgYSBwYXJ0aWN1bGFyIDItdmVydGV4IExpbmVTdHJpbmcgU2VnbWVudCBmcm9tIGEgR2VvSlNPTiB1c2luZyBgQHR1cmYvbWV0YWAgaW5kZXhlcy5cbiAqXG4gKiBOZWdhdGl2ZSBpbmRleGVzIGFyZSBwZXJtaXR0ZWQuXG4gKiBQb2ludCAmIE11bHRpUG9pbnQgd2lsbCBhbHdheXMgcmV0dXJuIG51bGwuXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIEFueSBHZW9KU09OIEZlYXR1cmUgb3IgR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZlYXR1cmVJbmRleD0wXSBGZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXg9MF0gTXVsdGktRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmdlb21ldHJ5SW5kZXg9MF0gR2VvbWV0cnkgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zZWdtZW50SW5kZXg9MF0gU2VnbWVudCBJbmRleFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnByb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSBQcm9wZXJ0aWVzIHRvIG91dHB1dCBMaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0JCb3h9IFtvcHRpb25zLmJib3g9e31dIFRyYW5zbGF0ZSBCQm94IHRvIG91dHB1dCBMaW5lU3RyaW5nXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRpb25zLmlkPXt9XSBUcmFuc2xhdGUgSWQgdG8gb3V0cHV0IExpbmVTdHJpbmdcbiAqIEByZXR1cm5zIHtGZWF0dXJlPExpbmVTdHJpbmc+fSAyLXZlcnRleCBHZW9KU09OIEZlYXR1cmUgTGluZVN0cmluZ1xuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbXG4gKiAgICAgW1sxMCwgMTBdLCBbNTAsIDMwXSwgWzMwLCA0MF1dLFxuICogICAgIFtbLTEwLCAtMTBdLCBbLTUwLCAtMzBdLCBbLTMwLCAtNDBdXVxuICogXSk7XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCAoZGVmYXVsdHMgYXJlIDApXG4gKiB0dXJmLmZpbmRTZWdtZW50KG11bHRpTGluZSk7XG4gKiAvLyA9PiBGZWF0dXJlPExpbmVTdHJpbmc8W1sxMCwgMTBdLCBbNTAsIDMwXV0+PlxuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgb2YgMm5kIE11bHRpIEZlYXR1cmVcbiAqIHR1cmYuZmluZFNlZ21lbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IDF9KTtcbiAqIC8vID0+IEZlYXR1cmU8TGluZVN0cmluZzxbWy0xMCwgLTEwXSwgWy01MCwgLTMwXV0+PlxuICpcbiAqIC8vIExhc3QgU2VnbWVudCBvZiBMYXN0IE11bHRpIEZlYXR1cmVcbiAqIHR1cmYuZmluZFNlZ21lbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IC0xLCBzZWdtZW50SW5kZXg6IC0xfSk7XG4gKiAvLyA9PiBGZWF0dXJlPExpbmVTdHJpbmc8W1stNTAsIC0zMF0sIFstMzAsIC00MF1dPj5cbiAqL1xuZnVuY3Rpb24gZmluZFNlZ21lbnQoZ2VvanNvbiwgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBmZWF0dXJlSW5kZXggPSBvcHRpb25zLmZlYXR1cmVJbmRleCB8fCAwO1xuICAgIHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IG9wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXggfHwgMDtcbiAgICB2YXIgZ2VvbWV0cnlJbmRleCA9IG9wdGlvbnMuZ2VvbWV0cnlJbmRleCB8fCAwO1xuICAgIHZhciBzZWdtZW50SW5kZXggPSBvcHRpb25zLnNlZ21lbnRJbmRleCB8fCAwO1xuXG4gICAgLy8gRmluZCBGZWF0dXJlSW5kZXhcbiAgICB2YXIgcHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB2YXIgZ2VvbWV0cnk7XG5cbiAgICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA8IDApIGZlYXR1cmVJbmRleCA9IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoICsgZmVhdHVyZUluZGV4O1xuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0ucHJvcGVydGllcztcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0uZ2VvbWV0cnk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0ZlYXR1cmUnOlxuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLnByb3BlcnRpZXM7XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5nZW9tZXRyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIFNlZ21lbnRJbmRleFxuICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNvb3JkcyA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgIHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHMubGVuZ3RoICsgc2VnbWVudEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoW2Nvb3Jkc1tzZWdtZW50SW5kZXhdLCBjb29yZHNbc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbZ2VvbWV0cnlJbmRleF0ubGVuZ3RoICsgc2VnbWVudEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoW2Nvb3Jkc1tnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXhdLCBjb29yZHNbZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgc2VnbWVudEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoW2Nvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIGlmIChzZWdtZW50SW5kZXggPCAwKSBzZWdtZW50SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCAtIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICAgIHJldHVybiBsaW5lU3RyaW5nKFtjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIGludmFsaWQnKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIHBhcnRpY3VsYXIgUG9pbnQgZnJvbSBhIEdlb0pTT04gdXNpbmcgYEB0dXJmL21ldGFgIGluZGV4ZXMuXG4gKlxuICogTmVnYXRpdmUgaW5kZXhlcyBhcmUgcGVybWl0dGVkLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBBbnkgR2VvSlNPTiBGZWF0dXJlIG9yIEdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mZWF0dXJlSW5kZXg9MF0gRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4PTBdIE11bHRpLUZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5nZW9tZXRyeUluZGV4PTBdIEdlb21ldHJ5IEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY29vcmRJbmRleD0wXSBDb29yZCBJbmRleFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnByb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSBQcm9wZXJ0aWVzIHRvIG91dHB1dCBQb2ludFxuICogQHBhcmFtIHtCQm94fSBbb3B0aW9ucy5iYm94PXt9XSBUcmFuc2xhdGUgQkJveCB0byBvdXRwdXQgUG9pbnRcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdGlvbnMuaWQ9e31dIFRyYW5zbGF0ZSBJZCB0byBvdXRwdXQgUG9pbnRcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvaW50Pn0gMi12ZXJ0ZXggR2VvSlNPTiBGZWF0dXJlIFBvaW50XG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgICBbWzEwLCAxMF0sIFs1MCwgMzBdLCBbMzAsIDQwXV0sXG4gKiAgICAgW1stMTAsIC0xMF0sIFstNTAsIC0zMF0sIFstMzAsIC00MF1dXG4gKiBdKTtcbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IChkZWZhdWx0cyBhcmUgMClcbiAqIHR1cmYuZmluZFBvaW50KG11bHRpTGluZSk7XG4gKiAvLyA9PiBGZWF0dXJlPFBvaW50PFsxMCwgMTBdPj5cbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IG9mIHRoZSAybmQgTXVsdGktRmVhdHVyZVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IDF9KTtcbiAqIC8vID0+IEZlYXR1cmU8UG9pbnQ8Wy0xMCwgLTEwXT4+XG4gKlxuICogLy8gTGFzdCBTZWdtZW50IG9mIGxhc3QgTXVsdGktRmVhdHVyZVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IC0xLCBjb29yZEluZGV4OiAtMX0pO1xuICogLy8gPT4gRmVhdHVyZTxQb2ludDxbLTMwLCAtNDBdPj5cbiAqL1xuZnVuY3Rpb24gZmluZFBvaW50KGdlb2pzb24sIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgZmVhdHVyZUluZGV4ID0gb3B0aW9ucy5mZWF0dXJlSW5kZXggfHwgMDtcbiAgICB2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSBvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4IHx8IDA7XG4gICAgdmFyIGdlb21ldHJ5SW5kZXggPSBvcHRpb25zLmdlb21ldHJ5SW5kZXggfHwgMDtcbiAgICB2YXIgY29vcmRJbmRleCA9IG9wdGlvbnMuY29vcmRJbmRleCB8fCAwO1xuXG4gICAgLy8gRmluZCBGZWF0dXJlSW5kZXhcbiAgICB2YXIgcHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB2YXIgZ2VvbWV0cnk7XG5cbiAgICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA8IDApIGZlYXR1cmVJbmRleCA9IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoICsgZmVhdHVyZUluZGV4O1xuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0ucHJvcGVydGllcztcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0uZ2VvbWV0cnk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0ZlYXR1cmUnOlxuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLnByb3BlcnRpZXM7XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5nZW9tZXRyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIENvb3JkIEluZGV4XG4gICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzLmxlbmd0aCArIGNvb3JkSW5kZXg7XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHNbY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHMubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCArIGNvb3JkSW5kZXg7XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHNbZ2VvbWV0cnlJbmRleF1bY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGNvb3JkSW5kZXg7XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKGdlb21ldHJ5SW5kZXggPCAwKSBnZW9tZXRyeUluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCAtIGNvb3JkSW5kZXg7XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIGludmFsaWQnKTtcbn1cblxuZXhwb3J0IHsgY29vcmRFYWNoLCBjb29yZFJlZHVjZSwgcHJvcEVhY2gsIHByb3BSZWR1Y2UsIGZlYXR1cmVFYWNoLCBmZWF0dXJlUmVkdWNlLCBjb29yZEFsbCwgZ2VvbUVhY2gsIGdlb21SZWR1Y2UsIGZsYXR0ZW5FYWNoLCBmbGF0dGVuUmVkdWNlLCBzZWdtZW50RWFjaCwgc2VnbWVudFJlZHVjZSwgbGluZUVhY2gsIGxpbmVSZWR1Y2UsIGZpbmRTZWdtZW50LCBmaW5kUG9pbnQgfTtcbiIsIi8qKlxuICogUmV0dXJucyBhIGNsb25lZCBjb3B5IG9mIHRoZSBwYXNzZWQgR2VvSlNPTiBPYmplY3QsIGluY2x1ZGluZyBwb3NzaWJsZSAnRm9yZWlnbiBNZW1iZXJzJy5cbiAqIH4zLTV4IGZhc3RlciB0aGFuIHRoZSBjb21tb24gSlNPTi5wYXJzZSArIEpTT04uc3RyaW5naWZ5IGNvbWJvIG1ldGhvZC5cbiAqXG4gKiBAbmFtZSBjbG9uZVxuICogQHBhcmFtIHtHZW9KU09OfSBnZW9qc29uIEdlb0pTT04gT2JqZWN0XG4gKiBAcmV0dXJucyB7R2VvSlNPTn0gY2xvbmVkIEdlb0pTT04gT2JqZWN0XG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcoW1stNzQsIDQwXSwgWy03OCwgNDJdLCBbLTgyLCAzNV1dLCB7Y29sb3I6ICdyZWQnfSk7XG4gKlxuICogdmFyIGxpbmVDbG9uZWQgPSB0dXJmLmNsb25lKGxpbmUpO1xuICovXG5mdW5jdGlvbiBjbG9uZShnZW9qc29uKSB7XG4gICAgaWYgKCFnZW9qc29uKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgcmVxdWlyZWQnKTtcblxuICAgIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgIHJldHVybiBjbG9uZUZlYXR1cmUoZ2VvanNvbik7XG4gICAgY2FzZSAnRmVhdHVyZUNvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gY2xvbmVGZWF0dXJlQ29sbGVjdGlvbihnZW9qc29uKTtcbiAgICBjYXNlICdQb2ludCc6XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgIGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XG4gICAgICAgIHJldHVybiBjbG9uZUdlb21ldHJ5KGdlb2pzb24pO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBHZW9KU09OIHR5cGUnKTtcbiAgICB9XG59XG5cbi8qKlxuICogQ2xvbmUgRmVhdHVyZVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0ZlYXR1cmU8YW55Pn0gZ2VvanNvbiBHZW9KU09OIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPGFueT59IGNsb25lZCBGZWF0dXJlXG4gKi9cbmZ1bmN0aW9uIGNsb25lRmVhdHVyZShnZW9qc29uKSB7XG4gICAgdmFyIGNsb25lZCA9IHt0eXBlOiAnRmVhdHVyZSd9O1xuICAgIC8vIFByZXNlcnZlIEZvcmVpZ24gTWVtYmVyc1xuICAgIE9iamVjdC5rZXlzKGdlb2pzb24pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICd0eXBlJzpcbiAgICAgICAgY2FzZSAncHJvcGVydGllcyc6XG4gICAgICAgIGNhc2UgJ2dlb21ldHJ5JzpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNsb25lZFtrZXldID0gZ2VvanNvbltrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWRkIHByb3BlcnRpZXMgJiBnZW9tZXRyeSBsYXN0XG4gICAgY2xvbmVkLnByb3BlcnRpZXMgPSBjbG9uZVByb3BlcnRpZXMoZ2VvanNvbi5wcm9wZXJ0aWVzKTtcbiAgICBjbG9uZWQuZ2VvbWV0cnkgPSBjbG9uZUdlb21ldHJ5KGdlb2pzb24uZ2VvbWV0cnkpO1xuICAgIHJldHVybiBjbG9uZWQ7XG59XG5cbi8qKlxuICogQ2xvbmUgUHJvcGVydGllc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBHZW9KU09OIFByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZCBQcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGNsb25lUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGNsb25lZCA9IHt9O1xuICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuIGNsb25lZDtcbiAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydGllc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIG51bGxcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBBcnJheVxuICAgICAgICAgICAgICAgIGNsb25lZFtrZXldID0gdmFsdWUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgZ2VuZXJpYyBPYmplY3RcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IGNsb25lUHJvcGVydGllcyh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBjbG9uZWRba2V5XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZWQ7XG59XG5cbi8qKlxuICogQ2xvbmUgRmVhdHVyZSBDb2xsZWN0aW9uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb248YW55Pn0gZ2VvanNvbiBHZW9KU09OIEZlYXR1cmUgQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPGFueT59IGNsb25lZCBGZWF0dXJlIENvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY2xvbmVGZWF0dXJlQ29sbGVjdGlvbihnZW9qc29uKSB7XG4gICAgdmFyIGNsb25lZCA9IHt0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nfTtcblxuICAgIC8vIFByZXNlcnZlIEZvcmVpZ24gTWVtYmVyc1xuICAgIE9iamVjdC5rZXlzKGdlb2pzb24pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICd0eXBlJzpcbiAgICAgICAgY2FzZSAnZmVhdHVyZXMnOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2xvbmVkW2tleV0gPSBnZW9qc29uW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZGQgZmVhdHVyZXNcbiAgICBjbG9uZWQuZmVhdHVyZXMgPSBnZW9qc29uLmZlYXR1cmVzLm1hcChmdW5jdGlvbiAoZmVhdHVyZSkge1xuICAgICAgICByZXR1cm4gY2xvbmVGZWF0dXJlKGZlYXR1cmUpO1xuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZWQ7XG59XG5cbi8qKlxuICogQ2xvbmUgR2VvbWV0cnlcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtHZW9tZXRyeTxhbnk+fSBnZW9tZXRyeSBHZW9KU09OIEdlb21ldHJ5XG4gKiBAcmV0dXJucyB7R2VvbWV0cnk8YW55Pn0gY2xvbmVkIEdlb21ldHJ5XG4gKi9cbmZ1bmN0aW9uIGNsb25lR2VvbWV0cnkoZ2VvbWV0cnkpIHtcbiAgICB2YXIgZ2VvbSA9IHt0eXBlOiBnZW9tZXRyeS50eXBlfTtcbiAgICBpZiAoZ2VvbWV0cnkuYmJveCkgZ2VvbS5iYm94ID0gZ2VvbWV0cnkuYmJveDtcblxuICAgIGlmIChnZW9tZXRyeS50eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJykge1xuICAgICAgICBnZW9tLmdlb21ldHJpZXMgPSBnZW9tZXRyeS5nZW9tZXRyaWVzLm1hcChmdW5jdGlvbiAoZ2VvbSkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lR2VvbWV0cnkoZ2VvbSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ2VvbTtcbiAgICB9XG4gICAgZ2VvbS5jb29yZGluYXRlcyA9IGRlZXBTbGljZShnZW9tZXRyeS5jb29yZGluYXRlcyk7XG4gICAgcmV0dXJuIGdlb207XG59XG5cbi8qKlxuICogRGVlcCBTbGljZSBjb29yZGluYXRlc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Nvb3JkaW5hdGVzfSBjb29yZHMgQ29vcmRpbmF0ZXNcbiAqIEByZXR1cm5zIHtDb29yZGluYXRlc30gYWxsIGNvb3JkaW5hdGVzIHNsaWNlZFxuICovXG5mdW5jdGlvbiBkZWVwU2xpY2UoY29vcmRzKSB7XG4gICAgaWYgKHR5cGVvZiBjb29yZHNbMF0gIT09ICdvYmplY3QnKSB7IHJldHVybiBjb29yZHMuc2xpY2UoKTsgfVxuICAgIHJldHVybiBjb29yZHMubWFwKGZ1bmN0aW9uIChjb29yZCkge1xuICAgICAgICByZXR1cm4gZGVlcFNsaWNlKGNvb3JkKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmU7XG4iLCIvKipcbiAqIEVhcnRoIFJhZGl1cyB1c2VkIHdpdGggdGhlIEhhcnZlc2luZSBmb3JtdWxhIGFuZCBhcHByb3hpbWF0ZXMgdXNpbmcgYSBzcGhlcmljYWwgKG5vbi1lbGxpcHNvaWQpIEVhcnRoLlxuICovXG52YXIgZWFydGhSYWRpdXMgPSA2MzcxMDA4Ljg7XG5cbi8qKlxuICogVW5pdCBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIHVzaW5nIGEgc3BoZXJpY2FsIChub24tZWxsaXBzb2lkKSBlYXJ0aCByYWRpdXMuXG4gKi9cbnZhciBmYWN0b3JzID0ge1xuICAgIG1ldGVyczogZWFydGhSYWRpdXMsXG4gICAgbWV0cmVzOiBlYXJ0aFJhZGl1cyxcbiAgICBtaWxsaW1ldGVyczogZWFydGhSYWRpdXMgKiAxMDAwLFxuICAgIG1pbGxpbWV0cmVzOiBlYXJ0aFJhZGl1cyAqIDEwMDAsXG4gICAgY2VudGltZXRlcnM6IGVhcnRoUmFkaXVzICogMTAwLFxuICAgIGNlbnRpbWV0cmVzOiBlYXJ0aFJhZGl1cyAqIDEwMCxcbiAgICBraWxvbWV0ZXJzOiBlYXJ0aFJhZGl1cyAvIDEwMDAsXG4gICAga2lsb21ldHJlczogZWFydGhSYWRpdXMgLyAxMDAwLFxuICAgIG1pbGVzOiBlYXJ0aFJhZGl1cyAvIDE2MDkuMzQ0LFxuICAgIG5hdXRpY2FsbWlsZXM6IGVhcnRoUmFkaXVzIC8gMTg1MixcbiAgICBpbmNoZXM6IGVhcnRoUmFkaXVzICogMzkuMzcwLFxuICAgIHlhcmRzOiBlYXJ0aFJhZGl1cyAvIDEuMDkzNixcbiAgICBmZWV0OiBlYXJ0aFJhZGl1cyAqIDMuMjgwODQsXG4gICAgcmFkaWFuczogMSxcbiAgICBkZWdyZWVzOiBlYXJ0aFJhZGl1cyAvIDExMTMyNSxcbn07XG5cbi8qKlxuICogVW5pdHMgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyBiYXNlZCBvbiAxIG1ldGVyLlxuICovXG52YXIgdW5pdHNGYWN0b3JzID0ge1xuICAgIG1ldGVyczogMSxcbiAgICBtZXRyZXM6IDEsXG4gICAgbWlsbGltZXRlcnM6IDEwMDAsXG4gICAgbWlsbGltZXRyZXM6IDEwMDAsXG4gICAgY2VudGltZXRlcnM6IDEwMCxcbiAgICBjZW50aW1ldHJlczogMTAwLFxuICAgIGtpbG9tZXRlcnM6IDEgLyAxMDAwLFxuICAgIGtpbG9tZXRyZXM6IDEgLyAxMDAwLFxuICAgIG1pbGVzOiAxIC8gMTYwOS4zNDQsXG4gICAgbmF1dGljYWxtaWxlczogMSAvIDE4NTIsXG4gICAgaW5jaGVzOiAzOS4zNzAsXG4gICAgeWFyZHM6IDEgLyAxLjA5MzYsXG4gICAgZmVldDogMy4yODA4NCxcbiAgICByYWRpYW5zOiAxIC8gZWFydGhSYWRpdXMsXG4gICAgZGVncmVlczogMSAvIDExMTMyNSxcbn07XG5cbi8qKlxuICogQXJlYSBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIGJhc2VkIG9uIDEgc3F1YXJlIG1ldGVyLlxuICovXG52YXIgYXJlYUZhY3RvcnMgPSB7XG4gICAgbWV0ZXJzOiAxLFxuICAgIG1ldHJlczogMSxcbiAgICBtaWxsaW1ldGVyczogMTAwMDAwMCxcbiAgICBtaWxsaW1ldHJlczogMTAwMDAwMCxcbiAgICBjZW50aW1ldGVyczogMTAwMDAsXG4gICAgY2VudGltZXRyZXM6IDEwMDAwLFxuICAgIGtpbG9tZXRlcnM6IDAuMDAwMDAxLFxuICAgIGtpbG9tZXRyZXM6IDAuMDAwMDAxLFxuICAgIGFjcmVzOiAwLjAwMDI0NzEwNSxcbiAgICBtaWxlczogMy44NmUtNyxcbiAgICB5YXJkczogMS4xOTU5OTAwNDYsXG4gICAgZmVldDogMTAuNzYzOTEwNDE3LFxuICAgIGluY2hlczogMTU1MC4wMDMxMDAwMDZcbn07XG5cbi8qKlxuICogV3JhcHMgYSBHZW9KU09OIHtAbGluayBHZW9tZXRyeX0gaW4gYSBHZW9KU09OIHtAbGluayBGZWF0dXJlfS5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBnZW9tZXRyeSBpbnB1dCBnZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlfSBhIEdlb0pTT04gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBnZW9tZXRyeSA9IHtcbiAqICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA1MF1cbiAqIH07XG4gKlxuICogdmFyIGZlYXR1cmUgPSB0dXJmLmZlYXR1cmUoZ2VvbWV0cnkpO1xuICpcbiAqIC8vPWZlYXR1cmVcbiAqL1xuZnVuY3Rpb24gZmVhdHVyZShnZW9tZXRyeSwgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBiYm94ID0gb3B0aW9ucy5iYm94O1xuICAgIHZhciBpZCA9IG9wdGlvbnMuaWQ7XG5cbiAgICAvLyBWYWxpZGF0aW9uXG4gICAgaWYgKGdlb21ldHJ5ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignZ2VvbWV0cnkgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAocHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHRocm93IG5ldyBFcnJvcigncHJvcGVydGllcyBtdXN0IGJlIGFuIE9iamVjdCcpO1xuICAgIGlmIChiYm94KSB2YWxpZGF0ZUJCb3goYmJveCk7XG4gICAgaWYgKGlkKSB2YWxpZGF0ZUlkKGlkKTtcblxuICAgIC8vIE1haW5cbiAgICB2YXIgZmVhdCA9IHt0eXBlOiAnRmVhdHVyZSd9O1xuICAgIGlmIChpZCkgZmVhdC5pZCA9IGlkO1xuICAgIGlmIChiYm94KSBmZWF0LmJib3ggPSBiYm94O1xuICAgIGZlYXQucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307XG4gICAgZmVhdC5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuICAgIHJldHVybiBmZWF0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBHZW9KU09OIHtAbGluayBHZW9tZXRyeX0gZnJvbSBhIEdlb21ldHJ5IHN0cmluZyB0eXBlICYgY29vcmRpbmF0ZXMuXG4gKiBGb3IgR2VvbWV0cnlDb2xsZWN0aW9uIHR5cGUgdXNlIGBoZWxwZXJzLmdlb21ldHJ5Q29sbGVjdGlvbmBcbiAqXG4gKiBAbmFtZSBnZW9tZXRyeVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgR2VvbWV0cnkgVHlwZVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjb29yZGluYXRlcyBDb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEdlb21ldHJ5XG4gKiBAcmV0dXJucyB7R2VvbWV0cnl9IGEgR2VvSlNPTiBHZW9tZXRyeVxuICogQGV4YW1wbGVcbiAqIHZhciB0eXBlID0gJ1BvaW50JztcbiAqIHZhciBjb29yZGluYXRlcyA9IFsxMTAsIDUwXTtcbiAqXG4gKiB2YXIgZ2VvbWV0cnkgPSB0dXJmLmdlb21ldHJ5KHR5cGUsIGNvb3JkaW5hdGVzKTtcbiAqXG4gKiAvLz1nZW9tZXRyeVxuICovXG5mdW5jdGlvbiBnZW9tZXRyeSh0eXBlLCBjb29yZGluYXRlcywgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBiYm94ID0gb3B0aW9ucy5iYm94O1xuXG4gICAgLy8gVmFsaWRhdGlvblxuICAgIGlmICghdHlwZSkgdGhyb3cgbmV3IEVycm9yKCd0eXBlIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIGlmIChiYm94KSB2YWxpZGF0ZUJCb3goYmJveCk7XG5cbiAgICAvLyBNYWluXG4gICAgdmFyIGdlb207XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnUG9pbnQnOiBnZW9tID0gcG9pbnQoY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdMaW5lU3RyaW5nJzogZ2VvbSA9IGxpbmVTdHJpbmcoY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdQb2x5Z29uJzogZ2VvbSA9IHBvbHlnb24oY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdNdWx0aVBvaW50JzogZ2VvbSA9IG11bHRpUG9pbnQoY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOiBnZW9tID0gbXVsdGlMaW5lU3RyaW5nKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzogZ2VvbSA9IG11bHRpUG9seWdvbihjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcih0eXBlICsgJyBpcyBpbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmIChiYm94KSBnZW9tLmJib3ggPSBiYm94O1xuICAgIHJldHVybiBnZW9tO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9pbnR9IHtAbGluayBGZWF0dXJlfSBmcm9tIGEgUG9zaXRpb24uXG4gKlxuICogQG5hbWUgcG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY29vcmRpbmF0ZXMgbG9uZ2l0dWRlLCBsYXRpdHVkZSBwb3NpdGlvbiAoZWFjaCBpbiBkZWNpbWFsIGRlZ3JlZXMpXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8UG9pbnQ+fSBhIFBvaW50IGZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdKTtcbiAqXG4gKiAvLz1wb2ludFxuICovXG5mdW5jdGlvbiBwb2ludChjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGF0IGxlYXN0IDIgbnVtYmVycyBsb25nJyk7XG4gICAgaWYgKCFpc051bWJlcihjb29yZGluYXRlc1swXSkgfHwgIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzFdKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycycpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvaW50fSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgUG9pbnQgY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgcG9pbnRzXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gVHJhbnNsYXRlIHRoZXNlIHByb3BlcnRpZXMgdG8gZWFjaCBGZWF0dXJlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPFBvaW50Pn0gUG9pbnQgRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludHMgPSB0dXJmLnBvaW50cyhbXG4gKiAgIFstNzUsIDM5XSxcbiAqICAgWy04MCwgNDVdLFxuICogICBbLTc4LCA1MF1cbiAqIF0pO1xuICpcbiAqIC8vPXBvaW50c1xuICovXG5mdW5jdGlvbiBwb2ludHMoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9seWdvbn0ge0BsaW5rIEZlYXR1cmV9IGZyb20gYW4gQXJyYXkgb2YgTGluZWFyUmluZ3MuXG4gKlxuICogQG5hbWUgcG9seWdvblxuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVhclJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8UG9seWdvbj59IFBvbHlnb24gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWy01LCA1Ml0sIFstNCwgNTZdLCBbLTIsIDUxXSwgWy03LCA1NF0sIFstNSwgNTJdXV0sIHsgbmFtZTogJ3BvbHkxJyB9KTtcbiAqXG4gKiAvLz1wb2x5Z29uXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb24oY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByaW5nID0gY29vcmRpbmF0ZXNbaV07XG4gICAgICAgIGlmIChyaW5nLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWFjaCBMaW5lYXJSaW5nIG9mIGEgUG9seWdvbiBtdXN0IGhhdmUgNCBvciBtb3JlIFBvc2l0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmdbcmluZy5sZW5ndGggLSAxXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZmlyc3QgcG9pbnQgb2YgUG9seWdvbiBjb250YWlucyB0d28gbnVtYmVyc1xuICAgICAgICAgICAgaWYgKGkgPT09IDAgJiYgaiA9PT0gMCAmJiAhaXNOdW1iZXIocmluZ1swXVswXSkgfHwgIWlzTnVtYmVyKHJpbmdbMF1bMV0pKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgY29udGFpbiBudW1iZXJzJyk7XG4gICAgICAgICAgICBpZiAocmluZ1tyaW5nLmxlbmd0aCAtIDFdW2pdICE9PSByaW5nWzBdW2pdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBhbmQgbGFzdCBQb3NpdGlvbiBhcmUgbm90IGVxdWl2YWxlbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2x5Z29ufSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgUG9seWdvbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBwb2x5Z29uc1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2x5Z29uIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uPn0gUG9seWdvbiBGZWF0dXJlQ29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29ucyA9IHR1cmYucG9seWdvbnMoW1xuICogICBbW1stNSwgNTJdLCBbLTQsIDU2XSwgWy0yLCA1MV0sIFstNywgNTRdLCBbLTUsIDUyXV1dLFxuICogICBbW1stMTUsIDQyXSwgWy0xNCwgNDZdLCBbLTEyLCA0MV0sIFstMTcsIDQ0XSwgWy0xNSwgNDJdXV0sXG4gKiBdKTtcbiAqXG4gKiAvLz1wb2x5Z29uc1xuICovXG5mdW5jdGlvbiBwb2x5Z29ucyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcblxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gcG9seWdvbihjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIExpbmVTdHJpbmd9IHtAbGluayBGZWF0dXJlfSBmcm9tIGFuIEFycmF5IG9mIFBvc2l0aW9ucy5cbiAqXG4gKiBAbmFtZSBsaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb3NpdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gTGluZVN0cmluZyBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmVzdHJpbmcxID0gdHVyZi5saW5lU3RyaW5nKFtbLTI0LCA2M10sIFstMjMsIDYwXSwgWy0yNSwgNjVdLCBbLTIwLCA2OV1dLCB7bmFtZTogJ2xpbmUgMSd9KTtcbiAqIHZhciBsaW5lc3RyaW5nMiA9IHR1cmYubGluZVN0cmluZyhbWy0xNCwgNDNdLCBbLTEzLCA0MF0sIFstMTUsIDQ1XSwgWy0xMCwgNDldXSwge25hbWU6ICdsaW5lIDInfSk7XG4gKlxuICogLy89bGluZXN0cmluZzFcbiAqIC8vPWxpbmVzdHJpbmcyXG4gKi9cbmZ1bmN0aW9uIGxpbmVTdHJpbmcoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA8IDIpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnMnKTtcbiAgICAvLyBDaGVjayBpZiBmaXJzdCBwb2ludCBvZiBMaW5lU3RyaW5nIGNvbnRhaW5zIHR3byBudW1iZXJzXG4gICAgaWYgKCFpc051bWJlcihjb29yZGluYXRlc1swXVsxXSkgfHwgIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdWzFdKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycycpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnTGluZVN0cmluZycsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgTGluZVN0cmluZ30ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIExpbmVTdHJpbmcgY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgbGluZVN0cmluZ3NcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVhclJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248TGluZVN0cmluZz59IExpbmVTdHJpbmcgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZXN0cmluZ3MgPSB0dXJmLmxpbmVTdHJpbmdzKFtcbiAqICAgW1stMjQsIDYzXSwgWy0yMywgNjBdLCBbLTI1LCA2NV0sIFstMjAsIDY5XV0sXG4gKiAgIFtbLTE0LCA0M10sIFstMTMsIDQwXSwgWy0xNSwgNDVdLCBbLTEwLCA0OV1dXG4gKiBdKTtcbiAqXG4gKiAvLz1saW5lc3RyaW5nc1xuICovXG5mdW5jdGlvbiBsaW5lU3RyaW5ncyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcblxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gbGluZVN0cmluZyhjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBUYWtlcyBvbmUgb3IgbW9yZSB7QGxpbmsgRmVhdHVyZXxGZWF0dXJlc30gYW5kIGNyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259LlxuICpcbiAqIEBuYW1lIGZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0ZlYXR1cmVbXX0gZmVhdHVyZXMgaW5wdXQgZmVhdHVyZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9ufSBGZWF0dXJlQ29sbGVjdGlvbiBvZiBGZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIHZhciBsb2NhdGlvbkEgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdLCB7bmFtZTogJ0xvY2F0aW9uIEEnfSk7XG4gKiB2YXIgbG9jYXRpb25CID0gdHVyZi5wb2ludChbLTc1LjgzMywgMzkuMjg0XSwge25hbWU6ICdMb2NhdGlvbiBCJ30pO1xuICogdmFyIGxvY2F0aW9uQyA9IHR1cmYucG9pbnQoWy03NS41MzQsIDM5LjEyM10sIHtuYW1lOiAnTG9jYXRpb24gQyd9KTtcbiAqXG4gKiB2YXIgY29sbGVjdGlvbiA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICBsb2NhdGlvbkEsXG4gKiAgIGxvY2F0aW9uQixcbiAqICAgbG9jYXRpb25DXG4gKiBdKTtcbiAqXG4gKiAvLz1jb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGJib3ggPSBvcHRpb25zLmJib3g7XG4gICAgdmFyIGlkID0gb3B0aW9ucy5pZDtcblxuICAgIC8vIFZhbGlkYXRpb25cbiAgICBpZiAoIWZlYXR1cmVzKSB0aHJvdyBuZXcgRXJyb3IoJ05vIGZlYXR1cmVzIHBhc3NlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShmZWF0dXJlcykpIHRocm93IG5ldyBFcnJvcignZmVhdHVyZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIGlmIChiYm94KSB2YWxpZGF0ZUJCb3goYmJveCk7XG4gICAgaWYgKGlkKSB2YWxpZGF0ZUlkKGlkKTtcblxuICAgIC8vIE1haW5cbiAgICB2YXIgZmMgPSB7dHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJ307XG4gICAgaWYgKGlkKSBmYy5pZCA9IGlkO1xuICAgIGlmIChiYm94KSBmYy5iYm94ID0gYmJveDtcbiAgICBmYy5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgIHJldHVybiBmYztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlMaW5lU3RyaW5nPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aUxpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lU3RyaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpTGluZVN0cmluZz59IGEgTXVsdGlMaW5lU3RyaW5nIGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtbWzAsMF0sWzEwLDEwXV1dKTtcbiAqXG4gKiAvLz1tdWx0aUxpbmVcbiAqL1xuZnVuY3Rpb24gbXVsdGlMaW5lU3RyaW5nKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpUG9pbnQ+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpUG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvc2l0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpUG9pbnQ+fSBhIE11bHRpUG9pbnQgZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQdCA9IHR1cmYubXVsdGlQb2ludChbWzAsMF0sWzEwLDEwXV0pO1xuICpcbiAqIC8vPW11bHRpUHRcbiAqL1xuZnVuY3Rpb24gbXVsdGlQb2ludChjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ011bHRpUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlQb2x5Z29uPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aVBvbHlnb25cbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9seWdvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aVBvbHlnb24+fSBhIG11bHRpcG9seWdvbiBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVBvbHkgPSB0dXJmLm11bHRpUG9seWdvbihbW1tbMCwwXSxbMCwxMF0sWzEwLDEwXSxbMTAsMF0sWzAsMF1dXV0pO1xuICpcbiAqIC8vPW11bHRpUG9seVxuICpcbiAqL1xuZnVuY3Rpb24gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnTXVsdGlQb2x5Z29uJyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPEdlb21ldHJ5Q29sbGVjdGlvbj59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgZ2VvbWV0cnlDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5PEdlb21ldHJ5Pn0gZ2VvbWV0cmllcyBhbiBhcnJheSBvZiBHZW9KU09OIEdlb21ldHJpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxHZW9tZXRyeUNvbGxlY3Rpb24+fSBhIEdlb0pTT04gR2VvbWV0cnlDb2xsZWN0aW9uIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcHQgPSB7XG4gKiAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgICAgIFwiY29vcmRpbmF0ZXNcIjogWzEwMCwgMF1cbiAqICAgICB9O1xuICogdmFyIGxpbmUgPSB7XG4gKiAgICAgXCJ0eXBlXCI6IFwiTGluZVN0cmluZ1wiLFxuICogICAgIFwiY29vcmRpbmF0ZXNcIjogWyBbMTAxLCAwXSwgWzEwMiwgMV0gXVxuICogICB9O1xuICogdmFyIGNvbGxlY3Rpb24gPSB0dXJmLmdlb21ldHJ5Q29sbGVjdGlvbihbcHQsIGxpbmVdKTtcbiAqXG4gKiAvLz1jb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdlb21ldHJ5Q29sbGVjdGlvbihnZW9tZXRyaWVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFnZW9tZXRyaWVzKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb21ldHJpZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ2VvbWV0cmllcykpIHRocm93IG5ldyBFcnJvcignZ2VvbWV0cmllcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdHZW9tZXRyeUNvbGxlY3Rpb24nLFxuICAgICAgICBnZW9tZXRyaWVzOiBnZW9tZXRyaWVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogUm91bmQgbnVtYmVyIHRvIHByZWNpc2lvblxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0gTnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBQcmVjaXNpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJvdW5kZWQgbnVtYmVyXG4gKiBAZXhhbXBsZVxuICogdHVyZi5yb3VuZCgxMjAuNDMyMSlcbiAqIC8vPTEyMFxuICpcbiAqIHR1cmYucm91bmQoMTIwLjQzMjEsIDIpXG4gKiAvLz0xMjAuNDNcbiAqL1xuZnVuY3Rpb24gcm91bmQobnVtLCBwcmVjaXNpb24pIHtcbiAgICBpZiAobnVtID09PSB1bmRlZmluZWQgfHwgbnVtID09PSBudWxsIHx8IGlzTmFOKG51bSkpIHRocm93IG5ldyBFcnJvcignbnVtIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKHByZWNpc2lvbiAmJiAhKHByZWNpc2lvbiA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKCdwcmVjaXNpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIHZhciBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKTtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiBtdWx0aXBsaWVyKSAvIG11bHRpcGxpZXI7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSByYWRpYW5zIHRvIGEgbW9yZSBmcmllbmRseSB1bml0LlxuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAbmFtZSByYWRpYW5zVG9MZW5ndGhcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIGluIHJhZGlhbnMgYWNyb3NzIHRoZSBzcGhlcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9J2tpbG9tZXRlcnMnXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLCBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiByYWRpYW5zVG9MZW5ndGgocmFkaWFucywgdW5pdHMpIHtcbiAgICBpZiAocmFkaWFucyA9PT0gdW5kZWZpbmVkIHx8IHJhZGlhbnMgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcigncmFkaWFucyBpcyByZXF1aXJlZCcpO1xuXG4gICAgaWYgKHVuaXRzICYmIHR5cGVvZiB1bml0cyAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcigndW5pdHMgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIHZhciBmYWN0b3IgPSBmYWN0b3JzW3VuaXRzIHx8ICdraWxvbWV0ZXJzJ107XG4gICAgaWYgKCFmYWN0b3IpIHRocm93IG5ldyBFcnJvcih1bml0cyArICcgdW5pdHMgaXMgaW52YWxpZCcpO1xuICAgIHJldHVybiByYWRpYW5zICogZmFjdG9yO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gYSByZWFsLXdvcmxkIHVuaXQgaW50byByYWRpYW5zXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBuYW1lIGxlbmd0aFRvUmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIGluIHJlYWwgdW5pdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9J2tpbG9tZXRlcnMnXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLCBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSByYWRpYW5zXG4gKi9cbmZ1bmN0aW9uIGxlbmd0aFRvUmFkaWFucyhkaXN0YW5jZSwgdW5pdHMpIHtcbiAgICBpZiAoZGlzdGFuY2UgPT09IHVuZGVmaW5lZCB8fCBkaXN0YW5jZSA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdkaXN0YW5jZSBpcyByZXF1aXJlZCcpO1xuXG4gICAgaWYgKHVuaXRzICYmIHR5cGVvZiB1bml0cyAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcigndW5pdHMgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIHZhciBmYWN0b3IgPSBmYWN0b3JzW3VuaXRzIHx8ICdraWxvbWV0ZXJzJ107XG4gICAgaWYgKCFmYWN0b3IpIHRocm93IG5ldyBFcnJvcih1bml0cyArICcgdW5pdHMgaXMgaW52YWxpZCcpO1xuICAgIHJldHVybiBkaXN0YW5jZSAvIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIGEgcmVhbC13b3JsZCB1bml0IGludG8gZGVncmVlc1xuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywgY2VudGltZXRlcnMsIGtpbG9tZXRyZXMsIGZlZXRcbiAqXG4gKiBAbmFtZSBsZW5ndGhUb0RlZ3JlZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBpbiByZWFsIHVuaXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPSdraWxvbWV0ZXJzJ10gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcywgbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gZGVncmVlc1xuICovXG5mdW5jdGlvbiBsZW5ndGhUb0RlZ3JlZXMoZGlzdGFuY2UsIHVuaXRzKSB7XG4gICAgcmV0dXJuIHJhZGlhbnNUb0RlZ3JlZXMobGVuZ3RoVG9SYWRpYW5zKGRpc3RhbmNlLCB1bml0cykpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFueSBiZWFyaW5nIGFuZ2xlIGZyb20gdGhlIG5vcnRoIGxpbmUgZGlyZWN0aW9uIChwb3NpdGl2ZSBjbG9ja3dpc2UpXG4gKiBhbmQgcmV0dXJucyBhbiBhbmdsZSBiZXR3ZWVuIDAtMzYwIGRlZ3JlZXMgKHBvc2l0aXZlIGNsb2Nrd2lzZSksIDAgYmVpbmcgdGhlIG5vcnRoIGxpbmVcbiAqXG4gKiBAbmFtZSBiZWFyaW5nVG9BemltdXRoXG4gKiBAcGFyYW0ge251bWJlcn0gYmVhcmluZyBhbmdsZSwgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gYmVhcmluZ1RvQXppbXV0aChiZWFyaW5nKSB7XG4gICAgaWYgKGJlYXJpbmcgPT09IG51bGwgfHwgYmVhcmluZyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2JlYXJpbmcgaXMgcmVxdWlyZWQnKTtcblxuICAgIHZhciBhbmdsZSA9IGJlYXJpbmcgJSAzNjA7XG4gICAgaWYgKGFuZ2xlIDwgMCkgYW5nbGUgKz0gMzYwO1xuICAgIHJldHVybiBhbmdsZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbmdsZSBpbiByYWRpYW5zIHRvIGRlZ3JlZXNcbiAqXG4gKiBAbmFtZSByYWRpYW5zVG9EZWdyZWVzXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyBhbmdsZSBpbiByYWRpYW5zXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkZWdyZWVzIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gcmFkaWFuc1RvRGVncmVlcyhyYWRpYW5zKSB7XG4gICAgaWYgKHJhZGlhbnMgPT09IG51bGwgfHwgcmFkaWFucyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ3JhZGlhbnMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHZhciBkZWdyZWVzID0gcmFkaWFucyAlICgyICogTWF0aC5QSSk7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiAxODAgLyBNYXRoLlBJO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFuZ2xlIGluIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICpcbiAqIEBuYW1lIGRlZ3JlZXNUb1JhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWdyZWVzIGFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFuZ2xlIGluIHJhZGlhbnNcbiAqL1xuZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7XG4gICAgaWYgKGRlZ3JlZXMgPT09IG51bGwgfHwgZGVncmVlcyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2RlZ3JlZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHZhciByYWRpYW5zID0gZGVncmVlcyAlIDM2MDtcbiAgICByZXR1cm4gcmFkaWFucyAqIE1hdGguUEkgLyAxODA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBsZW5ndGggdG8gdGhlIHJlcXVlc3RlZCB1bml0LlxuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpbmFsVW5pdCBvZiB0aGUgbGVuZ3RoXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZpbmFsVW5pdD0na2lsb21ldGVycyddIHJldHVybmVkIHVuaXRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBjb252ZXJ0ZWQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMZW5ndGgobGVuZ3RoLCBvcmlnaW5hbFVuaXQsIGZpbmFsVW5pdCkge1xuICAgIGlmIChsZW5ndGggPT09IG51bGwgfHwgbGVuZ3RoID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignbGVuZ3RoIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCEobGVuZ3RoID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG5cbiAgICByZXR1cm4gcmFkaWFuc1RvTGVuZ3RoKGxlbmd0aFRvUmFkaWFucyhsZW5ndGgsIG9yaWdpbmFsVW5pdCksIGZpbmFsVW5pdCB8fCAna2lsb21ldGVycycpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYXJlYSB0byB0aGUgcmVxdWVzdGVkIHVuaXQuXG4gKiBWYWxpZCB1bml0czoga2lsb21ldGVycywga2lsb21ldHJlcywgbWV0ZXJzLCBtZXRyZXMsIGNlbnRpbWV0cmVzLCBtaWxsaW1ldGVycywgYWNyZXMsIG1pbGVzLCB5YXJkcywgZmVldCwgaW5jaGVzXG4gKiBAcGFyYW0ge251bWJlcn0gYXJlYSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3JpZ2luYWxVbml0PSdtZXRlcnMnXSBvZiB0aGUgZGlzdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmluYWxVbml0PSdraWxvbWV0ZXJzJ10gcmV0dXJuZWQgdW5pdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGNvbnZlcnRlZCBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0QXJlYShhcmVhLCBvcmlnaW5hbFVuaXQsIGZpbmFsVW5pdCkge1xuICAgIGlmIChhcmVhID09PSBudWxsIHx8IGFyZWEgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdhcmVhIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCEoYXJlYSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKCdhcmVhIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcblxuICAgIHZhciBzdGFydEZhY3RvciA9IGFyZWFGYWN0b3JzW29yaWdpbmFsVW5pdCB8fCAnbWV0ZXJzJ107XG4gICAgaWYgKCFzdGFydEZhY3RvcikgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yaWdpbmFsIHVuaXRzJyk7XG5cbiAgICB2YXIgZmluYWxGYWN0b3IgPSBhcmVhRmFjdG9yc1tmaW5hbFVuaXQgfHwgJ2tpbG9tZXRlcnMnXTtcbiAgICBpZiAoIWZpbmFsRmFjdG9yKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZmluYWwgdW5pdHMnKTtcblxuICAgIHJldHVybiAoYXJlYSAvIHN0YXJ0RmFjdG9yKSAqIGZpbmFsRmFjdG9yO1xufVxuXG4vKipcbiAqIGlzTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSBudW0gTnVtYmVyIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIHR1cmYuaXNOdW1iZXIoMTIzKVxuICogLy89dHJ1ZVxuICogdHVyZi5pc051bWJlcignZm9vJylcbiAqIC8vPWZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKG51bSkge1xuICAgIHJldHVybiAhaXNOYU4obnVtKSAmJiBudW0gIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkobnVtKTtcbn1cblxuLyoqXG4gKiBpc09iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gaW5wdXQgdmFyaWFibGUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogdHVyZi5pc09iamVjdCh7ZWxldmF0aW9uOiAxMH0pXG4gKiAvLz10cnVlXG4gKiB0dXJmLmlzT2JqZWN0KCdmb28nKVxuICogLy89ZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICByZXR1cm4gKCEhaW5wdXQpICYmIChpbnB1dC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBCQm94XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gYmJveCBCQm94IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3MgRXJyb3IgaWYgQkJveCBpcyBub3QgdmFsaWRcbiAqIEBleGFtcGxlXG4gKiB2YWxpZGF0ZUJCb3goWy0xODAsIC00MCwgMTEwLCA1MF0pXG4gKiAvLz1PS1xuICogdmFsaWRhdGVCQm94KFstMTgwLCAtNDBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCgnRm9vJylcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3goNSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3gobnVsbClcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3godW5kZWZpbmVkKVxuICogLy89RXJyb3JcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCQm94KGJib3gpIHtcbiAgICBpZiAoIWJib3gpIHRocm93IG5ldyBFcnJvcignYmJveCBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShiYm94KSkgdGhyb3cgbmV3IEVycm9yKCdiYm94IG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICBpZiAoYmJveC5sZW5ndGggIT09IDQgJiYgYmJveC5sZW5ndGggIT09IDYpIHRocm93IG5ldyBFcnJvcignYmJveCBtdXN0IGJlIGFuIEFycmF5IG9mIDQgb3IgNiBudW1iZXJzJyk7XG4gICAgYmJveC5mb3JFYWNoKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgaWYgKCFpc051bWJlcihudW0pKSB0aHJvdyBuZXcgRXJyb3IoJ2Jib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycycpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIElkXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgSWQgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHRocm93cyBFcnJvciBpZiBJZCBpcyBub3QgdmFsaWRcbiAqIEBleGFtcGxlXG4gKiB2YWxpZGF0ZUlkKFstMTgwLCAtNDAsIDExMCwgNTBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQoWy0xODAsIC00MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZCgnRm9vJylcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUlkKDUpXG4gKiAvLz1PS1xuICogdmFsaWRhdGVJZChudWxsKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQodW5kZWZpbmVkKVxuICogLy89RXJyb3JcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJZChpZCkge1xuICAgIGlmICghaWQpIHRocm93IG5ldyBFcnJvcignaWQgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJ10uaW5kZXhPZih0eXBlb2YgaWQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdpZCBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nJyk7XG59XG5cbi8vIERlcHJlY2F0ZWQgbWV0aG9kc1xuZnVuY3Rpb24gcmFkaWFuczJkZWdyZWVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHJhZGlhbnNUb0RlZ3JlZXNgJyk7XG59XG5cbmZ1bmN0aW9uIGRlZ3JlZXMycmFkaWFucygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBkZWdyZWVzVG9SYWRpYW5zYCcpO1xufVxuXG5mdW5jdGlvbiBkaXN0YW5jZVRvRGVncmVlcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBsZW5ndGhUb0RlZ3JlZXNgJyk7XG59XG5cbmZ1bmN0aW9uIGRpc3RhbmNlVG9SYWRpYW5zKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGxlbmd0aFRvUmFkaWFuc2AnKTtcbn1cblxuZnVuY3Rpb24gcmFkaWFuc1RvRGlzdGFuY2UoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvTGVuZ3RoYCcpO1xufVxuXG5mdW5jdGlvbiBiZWFyaW5nVG9BbmdsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBiZWFyaW5nVG9BemltdXRoYCcpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgY29udmVydExlbmd0aGAnKTtcbn1cblxuZXhwb3J0IHsgZWFydGhSYWRpdXMsIGZhY3RvcnMsIHVuaXRzRmFjdG9ycywgYXJlYUZhY3RvcnMsIGZlYXR1cmUsIGdlb21ldHJ5LCBwb2ludCwgcG9pbnRzLCBwb2x5Z29uLCBwb2x5Z29ucywgbGluZVN0cmluZywgbGluZVN0cmluZ3MsIGZlYXR1cmVDb2xsZWN0aW9uLCBtdWx0aUxpbmVTdHJpbmcsIG11bHRpUG9pbnQsIG11bHRpUG9seWdvbiwgZ2VvbWV0cnlDb2xsZWN0aW9uLCByb3VuZCwgcmFkaWFuc1RvTGVuZ3RoLCBsZW5ndGhUb1JhZGlhbnMsIGxlbmd0aFRvRGVncmVlcywgYmVhcmluZ1RvQXppbXV0aCwgcmFkaWFuc1RvRGVncmVlcywgZGVncmVlc1RvUmFkaWFucywgY29udmVydExlbmd0aCwgY29udmVydEFyZWEsIGlzTnVtYmVyLCBpc09iamVjdCwgdmFsaWRhdGVCQm94LCB2YWxpZGF0ZUlkLCByYWRpYW5zMmRlZ3JlZXMsIGRlZ3JlZXMycmFkaWFucywgZGlzdGFuY2VUb0RlZ3JlZXMsIGRpc3RhbmNlVG9SYWRpYW5zLCByYWRpYW5zVG9EaXN0YW5jZSwgYmVhcmluZ1RvQW5nbGUsIGNvbnZlcnREaXN0YW5jZSB9O1xuIiwiaW1wb3J0IHsgY29udmVydExlbmd0aCwgZGVncmVlc1RvUmFkaWFucywgZWFydGhSYWRpdXMsIGlzT2JqZWN0LCBwb2ludCB9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IHsgZ2V0Q29vcmQgfSBmcm9tICdAdHVyZi9pbnZhcmlhbnQnO1xuXG4vLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SaHVtYl9saW5lXG4vKipcbiAqIFJldHVybnMgdGhlIGRlc3RpbmF0aW9uIHtAbGluayBQb2ludH0gaGF2aW5nIHRyYXZlbGxlZCB0aGUgZ2l2ZW4gZGlzdGFuY2UgYWxvbmcgYSBSaHVtYiBsaW5lIGZyb20gdGhlXG4gKiBvcmlnaW4gUG9pbnQgd2l0aCB0aGUgKHZhcmFudCkgZ2l2ZW4gYmVhcmluZy5cbiAqXG4gKiBAbmFtZSByaHVtYkRlc3RpbmF0aW9uXG4gKiBAcGFyYW0ge0Nvb3JkfSBvcmlnaW4gc3RhcnRpbmcgcG9pbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBkaXN0YW5jZSBmcm9tIHRoZSBzdGFydGluZyBwb2ludFxuICogQHBhcmFtIHtudW1iZXJ9IGJlYXJpbmcgdmFyYW50IGJlYXJpbmcgYW5nbGUgcmFuZ2luZyBmcm9tIC0xODAgdG8gMTgwIGRlZ3JlZXMgZnJvbSBub3J0aFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudW5pdHM9J2tpbG9tZXRlcnMnXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wcm9wZXJ0aWVzPXt9XSB0cmFuc2xhdGUgcHJvcGVydGllcyB0byBkZXN0aW5hdGlvbiBwb2ludFxuICogQHJldHVybnMge0ZlYXR1cmU8UG9pbnQ+fSBEZXN0aW5hdGlvbiBwb2ludC5cbiAqIEBleGFtcGxlXG4gKiB2YXIgcHQgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdLCB7XCJtYXJrZXItY29sb3JcIjogXCJGMDBcIn0pO1xuICogdmFyIGRpc3RhbmNlID0gNTA7XG4gKiB2YXIgYmVhcmluZyA9IDkwO1xuICogdmFyIG9wdGlvbnMgPSB7dW5pdHM6ICdtaWxlcyd9O1xuICpcbiAqIHZhciBkZXN0aW5hdGlvbiA9IHR1cmYucmh1bWJEZXN0aW5hdGlvbihwdCwgZGlzdGFuY2UsIGJlYXJpbmcsIG9wdGlvbnMpO1xuICpcbiAqIC8vYWRkVG9NYXBcbiAqIHZhciBhZGRUb01hcCA9IFtwdCwgZGVzdGluYXRpb25dXG4gKiBkZXN0aW5hdGlvbi5wcm9wZXJ0aWVzWydtYXJrZXItY29sb3InXSA9ICcjMDBGJztcbiAqL1xuZnVuY3Rpb24gcmh1bWJEZXN0aW5hdGlvbihvcmlnaW4sIGRpc3RhbmNlLCBiZWFyaW5nLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIHVuaXRzID0gb3B0aW9ucy51bml0cztcbiAgICB2YXIgcHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcblxuICAgIC8vIHZhbGlkYXRpb25cbiAgICBpZiAoIW9yaWdpbikgdGhyb3cgbmV3IEVycm9yKCdvcmlnaW4gaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IHVuZGVmaW5lZCB8fCBkaXN0YW5jZSA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdkaXN0YW5jZSBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChiZWFyaW5nID09PSB1bmRlZmluZWQgfHwgYmVhcmluZyA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdiZWFyaW5nIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCEoZGlzdGFuY2UgPj0gMCkpIHRocm93IG5ldyBFcnJvcignZGlzdGFuY2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuXG4gICAgdmFyIGRpc3RhbmNlSW5NZXRlcnMgPSBjb252ZXJ0TGVuZ3RoKGRpc3RhbmNlLCB1bml0cywgJ21ldGVycycpO1xuICAgIHZhciBjb29yZHMgPSBnZXRDb29yZChvcmlnaW4pO1xuICAgIHZhciBkZXN0aW5hdGlvbiA9IGNhbGN1bGF0ZVJodW1iRGVzdGluYXRpb24oY29vcmRzLCBkaXN0YW5jZUluTWV0ZXJzLCBiZWFyaW5nKTtcblxuICAgIC8vIGNvbXBlbnNhdGUgdGhlIGNyb3NzaW5nIG9mIHRoZSAxODB0aCBtZXJpZGlhbiAoaHR0cHM6Ly9tYWN3cmlnaHQub3JnLzIwMTYvMDkvMjYvdGhlLTE4MHRoLW1lcmlkaWFuLmh0bWwpXG4gICAgLy8gc29sdXRpb24gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMzI1MCNpc3N1ZWNvbW1lbnQtMjk0ODg3Njc4XG4gICAgZGVzdGluYXRpb25bMF0gKz0gKGRlc3RpbmF0aW9uWzBdIC0gY29vcmRzWzBdID4gMTgwKSA/IC0zNjAgOiAoY29vcmRzWzBdIC0gZGVzdGluYXRpb25bMF0gPiAxODApID8gMzYwIDogMDtcbiAgICByZXR1cm4gcG9pbnQoZGVzdGluYXRpb24sIHByb3BlcnRpZXMpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlc3RpbmF0aW9uIHBvaW50IGhhdmluZyB0cmF2ZWxsZWQgYWxvbmcgYSByaHVtYiBsaW5lIGZyb20gb3JpZ2luIHBvaW50IHRoZSBnaXZlblxuICogZGlzdGFuY2Ugb24gdGhlICBnaXZlbiBiZWFyaW5nLlxuICogQWRhcHRlZCBmcm9tIEdlb2Rlc3k6IGh0dHA6Ly93d3cubW92YWJsZS10eXBlLmNvLnVrL3NjcmlwdHMvbGF0bG9uZy5odG1sI3JodW1ibGluZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICAge0FycmF5PG51bWJlcj59IG9yaWdpbiAtIHBvaW50XG4gKiBAcGFyYW0gICB7bnVtYmVyfSBkaXN0YW5jZSAtIERpc3RhbmNlIHRyYXZlbGxlZCwgaW4gc2FtZSB1bml0cyBhcyBlYXJ0aCByYWRpdXMgKGRlZmF1bHQ6IG1ldHJlcykuXG4gKiBAcGFyYW0gICB7bnVtYmVyfSBiZWFyaW5nIC0gQmVhcmluZyBpbiBkZWdyZWVzIGZyb20gbm9ydGguXG4gKiBAcGFyYW0gICB7bnVtYmVyfSBbcmFkaXVzPTYzNzFlM10gLSAoTWVhbikgcmFkaXVzIG9mIGVhcnRoIChkZWZhdWx0cyB0byByYWRpdXMgaW4gbWV0cmVzKS5cbiAqIEByZXR1cm5zIHtBcnJheTxudW1iZXI+fSBEZXN0aW5hdGlvbiBwb2ludC5cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlUmh1bWJEZXN0aW5hdGlvbihvcmlnaW4sIGRpc3RhbmNlLCBiZWFyaW5nLCByYWRpdXMpIHtcbiAgICAvLyDPhiA9PiBwaGlcbiAgICAvLyDOuyA9PiBsYW1iZGFcbiAgICAvLyDPiCA9PiBwc2lcbiAgICAvLyDOlCA9PiBEZWx0YVxuICAgIC8vIM60ID0+IGRlbHRhXG4gICAgLy8gzrggPT4gdGhldGFcblxuICAgIHJhZGl1cyA9IChyYWRpdXMgPT09IHVuZGVmaW5lZCkgPyBlYXJ0aFJhZGl1cyA6IE51bWJlcihyYWRpdXMpO1xuXG4gICAgdmFyIGRlbHRhID0gZGlzdGFuY2UgLyByYWRpdXM7IC8vIGFuZ3VsYXIgZGlzdGFuY2UgaW4gcmFkaWFuc1xuICAgIHZhciBsYW1iZGExID0gb3JpZ2luWzBdICogTWF0aC5QSSAvIDE4MDsgLy8gdG8gcmFkaWFucywgYnV0IHdpdGhvdXQgbm9ybWFsaXplIHRvIPCdnItcbiAgICB2YXIgcGhpMSA9IGRlZ3JlZXNUb1JhZGlhbnMob3JpZ2luWzFdKTtcbiAgICB2YXIgdGhldGEgPSBkZWdyZWVzVG9SYWRpYW5zKGJlYXJpbmcpO1xuXG4gICAgdmFyIERlbHRhUGhpID0gZGVsdGEgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHBoaTIgPSBwaGkxICsgRGVsdGFQaGk7XG5cbiAgICAvLyBjaGVjayBmb3Igc29tZSBkYWZ0IGJ1Z2dlciBnb2luZyBwYXN0IHRoZSBwb2xlLCBub3JtYWxpc2UgbGF0aXR1ZGUgaWYgc29cbiAgICBpZiAoTWF0aC5hYnMocGhpMikgPiBNYXRoLlBJIC8gMikgcGhpMiA9IHBoaTIgPiAwID8gTWF0aC5QSSAtIHBoaTIgOiAtTWF0aC5QSSAtIHBoaTI7XG5cbiAgICB2YXIgRGVsdGFQc2kgPSBNYXRoLmxvZyhNYXRoLnRhbihwaGkyIC8gMiArIE1hdGguUEkgLyA0KSAvIE1hdGgudGFuKHBoaTEgLyAyICsgTWF0aC5QSSAvIDQpKTtcbiAgICB2YXIgcSA9IE1hdGguYWJzKERlbHRhUHNpKSA+IDEwZS0xMiA/IERlbHRhUGhpIC8gRGVsdGFQc2kgOiBNYXRoLmNvcyhwaGkxKTsgLy8gRS1XIGNvdXJzZSBiZWNvbWVzIGlsbC1jb25kaXRpb25lZCB3aXRoIDAvMFxuXG4gICAgdmFyIERlbHRhTGFtYmRhID0gZGVsdGEgKiBNYXRoLnNpbih0aGV0YSkgLyBxO1xuICAgIHZhciBsYW1iZGEyID0gbGFtYmRhMSArIERlbHRhTGFtYmRhO1xuXG4gICAgcmV0dXJuIFsoKGxhbWJkYTIgKiAxODAgLyBNYXRoLlBJKSArIDU0MCkgJSAzNjAgLSAxODAsIHBoaTIgKiAxODAgLyBNYXRoLlBJXTsgLy8gbm9ybWFsaXNlIHRvIOKIkjE4MC4uKzE4MMKwXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJodW1iRGVzdGluYXRpb247XG4iLCJpbXBvcnQgeyBpc051bWJlciB9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuXG4vKipcbiAqIFVud3JhcCBhIGNvb3JkaW5hdGUgZnJvbSBhIFBvaW50IEZlYXR1cmUsIEdlb21ldHJ5IG9yIGEgc2luZ2xlIGNvb3JkaW5hdGUuXG4gKlxuICogQG5hbWUgZ2V0Q29vcmRcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPnxHZW9tZXRyeTxQb2ludD58RmVhdHVyZTxQb2ludD59IGNvb3JkIEdlb0pTT04gUG9pbnQgb3IgYW4gQXJyYXkgb2YgbnVtYmVyc1xuICogQHJldHVybnMge0FycmF5PG51bWJlcj59IGNvb3JkaW5hdGVzXG4gKiBAZXhhbXBsZVxuICogdmFyIHB0ID0gdHVyZi5wb2ludChbMTAsIDEwXSk7XG4gKlxuICogdmFyIGNvb3JkID0gdHVyZi5nZXRDb29yZChwdCk7XG4gKiAvLz0gWzEwLCAxMF1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29vcmQoY29vcmQpIHtcbiAgICBpZiAoIWNvb3JkKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKGNvb3JkLnR5cGUgPT09ICdGZWF0dXJlJyAmJiBjb29yZC5nZW9tZXRyeSAhPT0gbnVsbCAmJiBjb29yZC5nZW9tZXRyeS50eXBlID09PSAnUG9pbnQnKSByZXR1cm4gY29vcmQuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgaWYgKGNvb3JkLnR5cGUgPT09ICdQb2ludCcpIHJldHVybiBjb29yZC5jb29yZGluYXRlcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb29yZCkgJiYgY29vcmQubGVuZ3RoID49IDIgJiYgY29vcmRbMF0ubGVuZ3RoID09PSB1bmRlZmluZWQgJiYgY29vcmRbMV0ubGVuZ3RoID09PSB1bmRlZmluZWQpIHJldHVybiBjb29yZDtcblxuICAgIHRocm93IG5ldyBFcnJvcignY29vcmQgbXVzdCBiZSBHZW9KU09OIFBvaW50IG9yIGFuIEFycmF5IG9mIG51bWJlcnMnKTtcbn1cblxuLyoqXG4gKiBVbndyYXAgY29vcmRpbmF0ZXMgZnJvbSBhIEZlYXR1cmUsIEdlb21ldHJ5IE9iamVjdCBvciBhbiBBcnJheVxuICpcbiAqIEBuYW1lIGdldENvb3Jkc1xuICogQHBhcmFtIHtBcnJheTxhbnk+fEdlb21ldHJ5fEZlYXR1cmV9IGNvb3JkcyBGZWF0dXJlLCBHZW9tZXRyeSBPYmplY3Qgb3IgYW4gQXJyYXlcbiAqIEByZXR1cm5zIHtBcnJheTxhbnk+fSBjb29yZGluYXRlc1xuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5ID0gdHVyZi5wb2x5Z29uKFtbWzExOS4zMiwgLTguN10sIFsxMTkuNTUsIC04LjY5XSwgWzExOS41MSwgLTguNTRdLCBbMTE5LjMyLCAtOC43XV1dKTtcbiAqXG4gKiB2YXIgY29vcmRzID0gdHVyZi5nZXRDb29yZHMocG9seSk7XG4gKiAvLz0gW1tbMTE5LjMyLCAtOC43XSwgWzExOS41NSwgLTguNjldLCBbMTE5LjUxLCAtOC41NF0sIFsxMTkuMzIsIC04LjddXV1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29vcmRzKGNvb3Jkcykge1xuICAgIGlmICghY29vcmRzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgLy8gRmVhdHVyZVxuICAgIGlmIChjb29yZHMudHlwZSA9PT0gJ0ZlYXR1cmUnICYmIGNvb3Jkcy5nZW9tZXRyeSAhPT0gbnVsbCkgcmV0dXJuIGNvb3Jkcy5nZW9tZXRyeS5jb29yZGluYXRlcztcblxuICAgIC8vIEdlb21ldHJ5XG4gICAgaWYgKGNvb3Jkcy5jb29yZGluYXRlcykgcmV0dXJuIGNvb3Jkcy5jb29yZGluYXRlcztcblxuICAgIC8vIEFycmF5IG9mIG51bWJlcnNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb29yZHMpKSByZXR1cm4gY29vcmRzO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb29yZHMgbXVzdCBiZSBHZW9KU09OIEZlYXR1cmUsIEdlb21ldHJ5IE9iamVjdCBvciBhbiBBcnJheScpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBjb29yZGluYXRlcyBjb250YWlucyBhIG51bWJlclxuICpcbiAqIEBuYW1lIGNvbnRhaW5zTnVtYmVyXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGNvb3JkaW5hdGVzIEdlb0pTT04gQ29vcmRpbmF0ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIEFycmF5IGNvbnRhaW5zIGEgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zTnVtYmVyKGNvb3JkaW5hdGVzKSB7XG4gICAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA+IDEgJiYgaXNOdW1iZXIoY29vcmRpbmF0ZXNbMF0pICYmIGlzTnVtYmVyKGNvb3JkaW5hdGVzWzFdKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb29yZGluYXRlc1swXSkgJiYgY29vcmRpbmF0ZXNbMF0ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjb250YWluc051bWJlcihjb29yZGluYXRlc1swXSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycycpO1xufVxuXG4vKipcbiAqIEVuZm9yY2UgZXhwZWN0YXRpb25zIGFib3V0IHR5cGVzIG9mIEdlb0pTT04gb2JqZWN0cyBmb3IgVHVyZi5cbiAqXG4gKiBAbmFtZSBnZW9qc29uVHlwZVxuICogQHBhcmFtIHtHZW9KU09OfSB2YWx1ZSBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGV4cGVjdGVkIEdlb0pTT04gdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiBjYWxsaW5nIGZ1bmN0aW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdmFsdWUgaXMgbm90IHRoZSBleHBlY3RlZCB0eXBlLlxuICovXG5mdW5jdGlvbiBnZW9qc29uVHlwZSh2YWx1ZSwgdHlwZSwgbmFtZSkge1xuICAgIGlmICghdHlwZSB8fCAhbmFtZSkgdGhyb3cgbmV3IEVycm9yKCd0eXBlIGFuZCBuYW1lIHJlcXVpcmVkJyk7XG5cbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLnR5cGUgIT09IHR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRvICcgKyBuYW1lICsgJzogbXVzdCBiZSBhICcgKyB0eXBlICsgJywgZ2l2ZW4gJyArIHZhbHVlLnR5cGUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBFbmZvcmNlIGV4cGVjdGF0aW9ucyBhYm91dCB0eXBlcyBvZiB7QGxpbmsgRmVhdHVyZX0gaW5wdXRzIGZvciBUdXJmLlxuICogSW50ZXJuYWxseSB0aGlzIHVzZXMge0BsaW5rIGdlb2pzb25UeXBlfSB0byBqdWRnZSBnZW9tZXRyeSB0eXBlcy5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlT2ZcbiAqIEBwYXJhbSB7RmVhdHVyZX0gZmVhdHVyZSBhIGZlYXR1cmUgd2l0aCBhbiBleHBlY3RlZCBnZW9tZXRyeSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBleHBlY3RlZCBHZW9KU09OIHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgY2FsbGluZyBmdW5jdGlvblxuICogQHRocm93cyB7RXJyb3J9IGVycm9yIGlmIHZhbHVlIGlzIG5vdCB0aGUgZXhwZWN0ZWQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gZmVhdHVyZU9mKGZlYXR1cmUsIHR5cGUsIG5hbWUpIHtcbiAgICBpZiAoIWZlYXR1cmUpIHRocm93IG5ldyBFcnJvcignTm8gZmVhdHVyZSBwYXNzZWQnKTtcbiAgICBpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcignLmZlYXR1cmVPZigpIHJlcXVpcmVzIGEgbmFtZScpO1xuICAgIGlmICghZmVhdHVyZSB8fCBmZWF0dXJlLnR5cGUgIT09ICdGZWF0dXJlJyB8fCAhZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQgdG8gJyArIG5hbWUgKyAnLCBGZWF0dXJlIHdpdGggZ2VvbWV0cnkgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCFmZWF0dXJlLmdlb21ldHJ5IHx8IGZlYXR1cmUuZ2VvbWV0cnkudHlwZSAhPT0gdHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQgdG8gJyArIG5hbWUgKyAnOiBtdXN0IGJlIGEgJyArIHR5cGUgKyAnLCBnaXZlbiAnICsgZmVhdHVyZS5nZW9tZXRyeS50eXBlKTtcbiAgICB9XG59XG5cbi8qKlxuICogRW5mb3JjZSBleHBlY3RhdGlvbnMgYWJvdXQgdHlwZXMgb2Yge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBpbnB1dHMgZm9yIFR1cmYuXG4gKiBJbnRlcm5hbGx5IHRoaXMgdXNlcyB7QGxpbmsgZ2VvanNvblR5cGV9IHRvIGp1ZGdlIGdlb21ldHJ5IHR5cGVzLlxuICpcbiAqIEBuYW1lIGNvbGxlY3Rpb25PZlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbn0gZmVhdHVyZUNvbGxlY3Rpb24gYSBGZWF0dXJlQ29sbGVjdGlvbiBmb3Igd2hpY2ggZmVhdHVyZXMgd2lsbCBiZSBqdWRnZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGV4cGVjdGVkIEdlb0pTT04gdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiBjYWxsaW5nIGZ1bmN0aW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdmFsdWUgaXMgbm90IHRoZSBleHBlY3RlZCB0eXBlLlxuICovXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2YoZmVhdHVyZUNvbGxlY3Rpb24sIHR5cGUsIG5hbWUpIHtcbiAgICBpZiAoIWZlYXR1cmVDb2xsZWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoJ05vIGZlYXR1cmVDb2xsZWN0aW9uIHBhc3NlZCcpO1xuICAgIGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKCcuY29sbGVjdGlvbk9mKCkgcmVxdWlyZXMgYSBuYW1lJyk7XG4gICAgaWYgKCFmZWF0dXJlQ29sbGVjdGlvbiB8fCBmZWF0dXJlQ29sbGVjdGlvbi50eXBlICE9PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0byAnICsgbmFtZSArICcsIEZlYXR1cmVDb2xsZWN0aW9uIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZUNvbGxlY3Rpb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlQ29sbGVjdGlvbi5mZWF0dXJlc1tpXTtcbiAgICAgICAgaWYgKCFmZWF0dXJlIHx8IGZlYXR1cmUudHlwZSAhPT0gJ0ZlYXR1cmUnIHx8ICFmZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQgdG8gJyArIG5hbWUgKyAnLCBGZWF0dXJlIHdpdGggZ2VvbWV0cnkgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZlYXR1cmUuZ2VvbWV0cnkgfHwgZmVhdHVyZS5nZW9tZXRyeS50eXBlICE9PSB0eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQgdG8gJyArIG5hbWUgKyAnOiBtdXN0IGJlIGEgJyArIHR5cGUgKyAnLCBnaXZlbiAnICsgZmVhdHVyZS5nZW9tZXRyeS50eXBlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBHZXQgR2VvbWV0cnkgZnJvbSBGZWF0dXJlIG9yIEdlb21ldHJ5IE9iamVjdFxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBHZW9KU09OIEZlYXR1cmUgb3IgR2VvbWV0cnkgT2JqZWN0XG4gKiBAcmV0dXJucyB7R2VvbWV0cnl8bnVsbH0gR2VvSlNPTiBHZW9tZXRyeSBPYmplY3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBnZW9qc29uIGlzIG5vdCBhIEZlYXR1cmUgb3IgR2VvbWV0cnkgT2JqZWN0XG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50ID0ge1xuICogICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXG4gKiAgIFwicHJvcGVydGllc1wiOiB7fSxcbiAqICAgXCJnZW9tZXRyeVwiOiB7XG4gKiAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgICBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDQwXVxuICogICB9XG4gKiB9XG4gKiB2YXIgZ2VvbSA9IHR1cmYuZ2V0R2VvbShwb2ludClcbiAqIC8vPXtcInR5cGVcIjogXCJQb2ludFwiLCBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDQwXX1cbiAqL1xuZnVuY3Rpb24gZ2V0R2VvbShnZW9qc29uKSB7XG4gICAgaWYgKCFnZW9qc29uKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoZ2VvanNvbi5nZW9tZXRyeSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZ2VvanNvbi5nZW9tZXRyeTtcbiAgICBpZiAoZ2VvanNvbi5jb29yZGluYXRlcyB8fCBnZW9qc29uLmdlb21ldHJpZXMpIHJldHVybiBnZW9qc29uO1xuICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBtdXN0IGJlIGEgdmFsaWQgRmVhdHVyZSBvciBHZW9tZXRyeSBPYmplY3QnKTtcbn1cblxuLyoqXG4gKiBHZXQgR2VvbWV0cnkgVHlwZSBmcm9tIEZlYXR1cmUgb3IgR2VvbWV0cnkgT2JqZWN0XG4gKlxuICogQHRocm93cyB7RXJyb3J9ICoqREVQUkVDQVRFRCoqIGluIHY1LjAuMCBpbiBmYXZvciBvZiBnZXRUeXBlXG4gKi9cbmZ1bmN0aW9uIGdldEdlb21UeXBlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50LmdldEdlb21UeXBlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdjUuMCBpbiBmYXZvciBvZiBpbnZhcmlhbnQuZ2V0VHlwZScpO1xufVxuXG4vKipcbiAqIEdldCBHZW9KU09OIG9iamVjdCdzIHR5cGUsIEdlb21ldHJ5IHR5cGUgaXMgcHJpb3JpdGl6ZS5cbiAqXG4gKiBAcGFyYW0ge0dlb0pTT059IGdlb2pzb24gR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1cImdlb2pzb25cIl0gbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gZGlzcGxheSBpbiBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBHZW9KU09OIHR5cGVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSB7XG4gKiAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAqICAgXCJwcm9wZXJ0aWVzXCI6IHt9LFxuICogICBcImdlb21ldHJ5XCI6IHtcbiAqICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICAgIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNDBdXG4gKiAgIH1cbiAqIH1cbiAqIHZhciBnZW9tID0gdHVyZi5nZXRUeXBlKHBvaW50KVxuICogLy89XCJQb2ludFwiXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGUoZ2VvanNvbiwgbmFtZSkge1xuICAgIGlmICghZ2VvanNvbikgdGhyb3cgbmV3IEVycm9yKChuYW1lIHx8ICdnZW9qc29uJykgKyAnIGlzIHJlcXVpcmVkJyk7XG4gICAgLy8gR2VvSlNPTiBGZWF0dXJlICYgR2VvbWV0cnlDb2xsZWN0aW9uXG4gICAgaWYgKGdlb2pzb24uZ2VvbWV0cnkgJiYgZ2VvanNvbi5nZW9tZXRyeS50eXBlKSByZXR1cm4gZ2VvanNvbi5nZW9tZXRyeS50eXBlO1xuICAgIC8vIEdlb0pTT04gR2VvbWV0cnkgJiBGZWF0dXJlQ29sbGVjdGlvblxuICAgIGlmIChnZW9qc29uLnR5cGUpIHJldHVybiBnZW9qc29uLnR5cGU7XG4gICAgdGhyb3cgbmV3IEVycm9yKChuYW1lIHx8ICdnZW9qc29uJykgKyAnIGlzIGludmFsaWQnKTtcbn1cblxuZXhwb3J0IHsgZ2V0Q29vcmQsIGdldENvb3JkcywgY29udGFpbnNOdW1iZXIsIGdlb2pzb25UeXBlLCBmZWF0dXJlT2YsIGNvbGxlY3Rpb25PZiwgZ2V0R2VvbSwgZ2V0R2VvbVR5cGUsIGdldFR5cGUgfTtcbiIsImltcG9ydCB7IGNvb3JkRWFjaCB9IGZyb20gJ0B0dXJmL21ldGEnO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCB7IGdldENvb3JkcyB9IGZyb20gJ0B0dXJmL2ludmFyaWFudCc7XG5pbXBvcnQgY2xvbmUgZnJvbSAnQHR1cmYvY2xvbmUnO1xuaW1wb3J0IHJodW1iRGVzdGluYXRpb24gZnJvbSAnQHR1cmYvcmh1bWItZGVzdGluYXRpb24nO1xuXG4vKipcbiAqIE1vdmVzIGFueSBnZW9qc29uIEZlYXR1cmUgb3IgR2VvbWV0cnkgb2YgYSBzcGVjaWZpZWQgZGlzdGFuY2UgYWxvbmcgYSBSaHVtYiBMaW5lXG4gKiBvbiB0aGUgcHJvdmlkZWQgZGlyZWN0aW9uIGFuZ2xlLlxuICpcbiAqIEBuYW1lIHRyYW5zZm9ybVRyYW5zbGF0ZVxuICogQHBhcmFtIHtHZW9KU09OfSBnZW9qc29uIG9iamVjdCB0byBiZSB0cmFuc2xhdGVkXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgbGVuZ3RoIG9mIHRoZSBtb3Rpb247IG5lZ2F0aXZlIHZhbHVlcyBkZXRlcm1pbmUgbW90aW9uIGluIG9wcG9zaXRlIGRpcmVjdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IGRpcmVjdGlvbiBvZiB0aGUgbW90aW9uOyBhbmdsZSBmcm9tIE5vcnRoIGluIGRlY2ltYWwgZGVncmVlcywgcG9zaXRpdmUgY2xvY2t3aXNlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51bml0cz0na2lsb21ldGVycyddIGluIHdoaWNoIGBkaXN0YW5jZWAgd2lsbCBiZSBleHByZXNzOyBtaWxlcywga2lsb21ldGVycywgZGVncmVlcywgb3IgcmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnpUcmFuc2xhdGlvbj0wXSBsZW5ndGggb2YgdGhlIHZlcnRpY2FsIG1vdGlvbiwgc2FtZSB1bml0IG9mIGRpc3RhbmNlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm11dGF0ZT1mYWxzZV0gYWxsb3dzIEdlb0pTT04gaW5wdXQgdG8gYmUgbXV0YXRlZCAoc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW5jcmVhc2UgaWYgdHJ1ZSlcbiAqIEByZXR1cm5zIHtHZW9KU09OfSB0aGUgdHJhbnNsYXRlZCBHZW9KU09OIG9iamVjdFxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5ID0gdHVyZi5wb2x5Z29uKFtbWzAsMjldLFszLjUsMjldLFsyLjUsMzJdLFswLDI5XV1dKTtcbiAqIHZhciB0cmFuc2xhdGVkUG9seSA9IHR1cmYudHJhbnNmb3JtVHJhbnNsYXRlKHBvbHksIDEwMCwgMzUpO1xuICpcbiAqIC8vYWRkVG9NYXBcbiAqIHZhciBhZGRUb01hcCA9IFtwb2x5LCB0cmFuc2xhdGVkUG9seV07XG4gKiB0cmFuc2xhdGVkUG9seS5wcm9wZXJ0aWVzID0ge3N0cm9rZTogJyNGMDAnLCAnc3Ryb2tlLXdpZHRoJzogNH07XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVRyYW5zbGF0ZShnZW9qc29uLCBkaXN0YW5jZSwgZGlyZWN0aW9uLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIHVuaXRzID0gb3B0aW9ucy51bml0cztcbiAgICB2YXIgelRyYW5zbGF0aW9uID0gb3B0aW9ucy56VHJhbnNsYXRpb247XG4gICAgdmFyIG11dGF0ZSA9IG9wdGlvbnMubXV0YXRlO1xuXG4gICAgLy8gSW5wdXQgdmFsaWRhdGlvblxuICAgIGlmICghZ2VvanNvbikgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKGRpc3RhbmNlID09PSB1bmRlZmluZWQgfHwgZGlzdGFuY2UgPT09IG51bGwgfHwgaXNOYU4oZGlzdGFuY2UpKSB0aHJvdyBuZXcgRXJyb3IoJ2Rpc3RhbmNlIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKHpUcmFuc2xhdGlvbiAmJiB0eXBlb2YgelRyYW5zbGF0aW9uICE9PSAnbnVtYmVyJyAmJiBpc05hTih6VHJhbnNsYXRpb24pKSB0aHJvdyBuZXcgRXJyb3IoJ3pUcmFuc2xhdGlvbiBpcyBub3QgYSBudW1iZXInKTtcblxuICAgIC8vIFNob3J0Y3V0IG5vLW1vdGlvblxuICAgIHpUcmFuc2xhdGlvbiA9ICh6VHJhbnNsYXRpb24gIT09IHVuZGVmaW5lZCkgPyB6VHJhbnNsYXRpb24gOiAwO1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMCAmJiB6VHJhbnNsYXRpb24gPT09IDApIHJldHVybiBnZW9qc29uO1xuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGRpcmVjdGlvbiA9PT0gbnVsbCB8fCBpc05hTihkaXJlY3Rpb24pKSB0aHJvdyBuZXcgRXJyb3IoJ2RpcmVjdGlvbiBpcyByZXF1aXJlZCcpO1xuXG4gICAgLy8gSW52ZXJ0IHdpdGggbmVnYXRpdmUgZGlzdGFuY2VzXG4gICAgaWYgKGRpc3RhbmNlIDwgMCkge1xuICAgICAgICBkaXN0YW5jZSA9IC1kaXN0YW5jZTtcbiAgICAgICAgZGlyZWN0aW9uID0gLWRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICAvLyBDbG9uZSBnZW9qc29uIHRvIGF2b2lkIHNpZGUgZWZmZWN0c1xuICAgIGlmIChtdXRhdGUgPT09IGZhbHNlIHx8IG11dGF0ZSA9PT0gdW5kZWZpbmVkKSBnZW9qc29uID0gY2xvbmUoZ2VvanNvbik7XG5cbiAgICAvLyBUcmFuc2xhdGUgZWFjaCBjb29yZGluYXRlXG4gICAgY29vcmRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChwb2ludENvb3Jkcykge1xuICAgICAgICB2YXIgbmV3Q29vcmRzID0gZ2V0Q29vcmRzKHJodW1iRGVzdGluYXRpb24ocG9pbnRDb29yZHMsIGRpc3RhbmNlLCBkaXJlY3Rpb24sIHt1bml0czogdW5pdHN9KSk7XG4gICAgICAgIHBvaW50Q29vcmRzWzBdID0gbmV3Q29vcmRzWzBdO1xuICAgICAgICBwb2ludENvb3Jkc1sxXSA9IG5ld0Nvb3Jkc1sxXTtcbiAgICAgICAgaWYgKHpUcmFuc2xhdGlvbiAmJiBwb2ludENvb3Jkcy5sZW5ndGggPT09IDMpIHBvaW50Q29vcmRzWzJdICs9IHpUcmFuc2xhdGlvbjtcbiAgICB9KTtcbiAgICByZXR1cm4gZ2VvanNvbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNmb3JtVHJhbnNsYXRlO1xuIiwiLyoqXG4gKiBFYXJ0aCBSYWRpdXMgdXNlZCB3aXRoIHRoZSBIYXJ2ZXNpbmUgZm9ybXVsYSBhbmQgYXBwcm94aW1hdGVzIHVzaW5nIGEgc3BoZXJpY2FsIChub24tZWxsaXBzb2lkKSBFYXJ0aC5cbiAqL1xudmFyIGVhcnRoUmFkaXVzID0gNjM3MTAwOC44O1xuXG4vKipcbiAqIFVuaXQgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyB1c2luZyBhIHNwaGVyaWNhbCAobm9uLWVsbGlwc29pZCkgZWFydGggcmFkaXVzLlxuICovXG52YXIgZmFjdG9ycyA9IHtcbiAgICBtZXRlcnM6IGVhcnRoUmFkaXVzLFxuICAgIG1ldHJlczogZWFydGhSYWRpdXMsXG4gICAgbWlsbGltZXRlcnM6IGVhcnRoUmFkaXVzICogMTAwMCxcbiAgICBtaWxsaW1ldHJlczogZWFydGhSYWRpdXMgKiAxMDAwLFxuICAgIGNlbnRpbWV0ZXJzOiBlYXJ0aFJhZGl1cyAqIDEwMCxcbiAgICBjZW50aW1ldHJlczogZWFydGhSYWRpdXMgKiAxMDAsXG4gICAga2lsb21ldGVyczogZWFydGhSYWRpdXMgLyAxMDAwLFxuICAgIGtpbG9tZXRyZXM6IGVhcnRoUmFkaXVzIC8gMTAwMCxcbiAgICBtaWxlczogZWFydGhSYWRpdXMgLyAxNjA5LjM0NCxcbiAgICBuYXV0aWNhbG1pbGVzOiBlYXJ0aFJhZGl1cyAvIDE4NTIsXG4gICAgaW5jaGVzOiBlYXJ0aFJhZGl1cyAqIDM5LjM3MCxcbiAgICB5YXJkczogZWFydGhSYWRpdXMgLyAxLjA5MzYsXG4gICAgZmVldDogZWFydGhSYWRpdXMgKiAzLjI4MDg0LFxuICAgIHJhZGlhbnM6IDEsXG4gICAgZGVncmVlczogZWFydGhSYWRpdXMgLyAxMTEzMjUsXG59O1xuXG4vKipcbiAqIFVuaXRzIG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgYmFzZWQgb24gMSBtZXRlci5cbiAqL1xudmFyIHVuaXRzRmFjdG9ycyA9IHtcbiAgICBtZXRlcnM6IDEsXG4gICAgbWV0cmVzOiAxLFxuICAgIG1pbGxpbWV0ZXJzOiAxMDAwLFxuICAgIG1pbGxpbWV0cmVzOiAxMDAwLFxuICAgIGNlbnRpbWV0ZXJzOiAxMDAsXG4gICAgY2VudGltZXRyZXM6IDEwMCxcbiAgICBraWxvbWV0ZXJzOiAxIC8gMTAwMCxcbiAgICBraWxvbWV0cmVzOiAxIC8gMTAwMCxcbiAgICBtaWxlczogMSAvIDE2MDkuMzQ0LFxuICAgIG5hdXRpY2FsbWlsZXM6IDEgLyAxODUyLFxuICAgIGluY2hlczogMzkuMzcwLFxuICAgIHlhcmRzOiAxIC8gMS4wOTM2LFxuICAgIGZlZXQ6IDMuMjgwODQsXG4gICAgcmFkaWFuczogMSAvIGVhcnRoUmFkaXVzLFxuICAgIGRlZ3JlZXM6IDEgLyAxMTEzMjUsXG59O1xuXG4vKipcbiAqIEFyZWEgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyBiYXNlZCBvbiAxIHNxdWFyZSBtZXRlci5cbiAqL1xudmFyIGFyZWFGYWN0b3JzID0ge1xuICAgIG1ldGVyczogMSxcbiAgICBtZXRyZXM6IDEsXG4gICAgbWlsbGltZXRlcnM6IDEwMDAwMDAsXG4gICAgbWlsbGltZXRyZXM6IDEwMDAwMDAsXG4gICAgY2VudGltZXRlcnM6IDEwMDAwLFxuICAgIGNlbnRpbWV0cmVzOiAxMDAwMCxcbiAgICBraWxvbWV0ZXJzOiAwLjAwMDAwMSxcbiAgICBraWxvbWV0cmVzOiAwLjAwMDAwMSxcbiAgICBhY3JlczogMC4wMDAyNDcxMDUsXG4gICAgbWlsZXM6IDMuODZlLTcsXG4gICAgeWFyZHM6IDEuMTk1OTkwMDQ2LFxuICAgIGZlZXQ6IDEwLjc2MzkxMDQxNyxcbiAgICBpbmNoZXM6IDE1NTAuMDAzMTAwMDA2XG59O1xuXG4vKipcbiAqIFdyYXBzIGEgR2VvSlNPTiB7QGxpbmsgR2VvbWV0cnl9IGluIGEgR2VvSlNPTiB7QGxpbmsgRmVhdHVyZX0uXG4gKlxuICogQG5hbWUgZmVhdHVyZVxuICogQHBhcmFtIHtHZW9tZXRyeX0gZ2VvbWV0cnkgaW5wdXQgZ2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZX0gYSBHZW9KU09OIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgZ2VvbWV0cnkgPSB7XG4gKiAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNTBdXG4gKiB9O1xuICpcbiAqIHZhciBmZWF0dXJlID0gdHVyZi5mZWF0dXJlKGdlb21ldHJ5KTtcbiAqXG4gKiAvLz1mZWF0dXJlXG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmUoZ2VvbWV0cnksIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgYmJveCA9IG9wdGlvbnMuYmJveDtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmlkO1xuXG4gICAgLy8gVmFsaWRhdGlvblxuICAgIGlmIChnZW9tZXRyeSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb21ldHJ5IGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKHByb3BlcnRpZXMgJiYgcHJvcGVydGllcy5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB0aHJvdyBuZXcgRXJyb3IoJ3Byb3BlcnRpZXMgbXVzdCBiZSBhbiBPYmplY3QnKTtcbiAgICBpZiAoYmJveCkgdmFsaWRhdGVCQm94KGJib3gpO1xuICAgIGlmIChpZCkgdmFsaWRhdGVJZChpZCk7XG5cbiAgICAvLyBNYWluXG4gICAgdmFyIGZlYXQgPSB7dHlwZTogJ0ZlYXR1cmUnfTtcbiAgICBpZiAoaWQpIGZlYXQuaWQgPSBpZDtcbiAgICBpZiAoYmJveCkgZmVhdC5iYm94ID0gYmJveDtcbiAgICBmZWF0LnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIGZlYXQuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcbiAgICByZXR1cm4gZmVhdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgR2VvSlNPTiB7QGxpbmsgR2VvbWV0cnl9IGZyb20gYSBHZW9tZXRyeSBzdHJpbmcgdHlwZSAmIGNvb3JkaW5hdGVzLlxuICogRm9yIEdlb21ldHJ5Q29sbGVjdGlvbiB0eXBlIHVzZSBgaGVscGVycy5nZW9tZXRyeUNvbGxlY3Rpb25gXG4gKlxuICogQG5hbWUgZ2VvbWV0cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIEdlb21ldHJ5IFR5cGVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY29vcmRpbmF0ZXMgQ29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBHZW9tZXRyeVxuICogQHJldHVybnMge0dlb21ldHJ5fSBhIEdlb0pTT04gR2VvbWV0cnlcbiAqIEBleGFtcGxlXG4gKiB2YXIgdHlwZSA9ICdQb2ludCc7XG4gKiB2YXIgY29vcmRpbmF0ZXMgPSBbMTEwLCA1MF07XG4gKlxuICogdmFyIGdlb21ldHJ5ID0gdHVyZi5nZW9tZXRyeSh0eXBlLCBjb29yZGluYXRlcyk7XG4gKlxuICogLy89Z2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gZ2VvbWV0cnkodHlwZSwgY29vcmRpbmF0ZXMsIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgYmJveCA9IG9wdGlvbnMuYmJveDtcblxuICAgIC8vIFZhbGlkYXRpb25cbiAgICBpZiAoIXR5cGUpIHRocm93IG5ldyBFcnJvcigndHlwZSBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICBpZiAoYmJveCkgdmFsaWRhdGVCQm94KGJib3gpO1xuXG4gICAgLy8gTWFpblxuICAgIHZhciBnZW9tO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1BvaW50JzogZ2VvbSA9IHBvaW50KGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6IGdlb20gPSBsaW5lU3RyaW5nKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnUG9seWdvbic6IGdlb20gPSBwb2x5Z29uKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6IGdlb20gPSBtdWx0aVBvaW50KGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzogZ2VvbSA9IG11bHRpTGluZVN0cmluZyhjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ011bHRpUG9seWdvbic6IGdlb20gPSBtdWx0aVBvbHlnb24oY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IodHlwZSArICcgaXMgaW52YWxpZCcpO1xuICAgIH1cbiAgICBpZiAoYmJveCkgZ2VvbS5iYm94ID0gYmJveDtcbiAgICByZXR1cm4gZ2VvbTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvaW50fSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhIFBvc2l0aW9uLlxuICpcbiAqIEBuYW1lIHBvaW50XG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvb3JkaW5hdGVzIGxvbmdpdHVkZSwgbGF0aXR1ZGUgcG9zaXRpb24gKGVhY2ggaW4gZGVjaW1hbCBkZWdyZWVzKVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvaW50Pn0gYSBQb2ludCBmZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50ID0gdHVyZi5wb2ludChbLTc1LjM0MywgMzkuOTg0XSk7XG4gKlxuICogLy89cG9pbnRcbiAqL1xuZnVuY3Rpb24gcG9pbnQoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA8IDIpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhdCBsZWFzdCAyIG51bWJlcnMgbG9uZycpO1xuICAgIGlmICghaXNOdW1iZXIoY29vcmRpbmF0ZXNbMF0pIHx8ICFpc051bWJlcihjb29yZGluYXRlc1sxXSkpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBjb250YWluIG51bWJlcnMnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2ludH0ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIFBvaW50IGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIHBvaW50c1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSB0aGVzZSBwcm9wZXJ0aWVzIHRvIGVhY2ggRmVhdHVyZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxQb2ludD59IFBvaW50IEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnRzID0gdHVyZi5wb2ludHMoW1xuICogICBbLTc1LCAzOV0sXG4gKiAgIFstODAsIDQ1XSxcbiAqICAgWy03OCwgNTBdXG4gKiBdKTtcbiAqXG4gKiAvLz1wb2ludHNcbiAqL1xuZnVuY3Rpb24gcG9pbnRzKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvbHlnb259IHtAbGluayBGZWF0dXJlfSBmcm9tIGFuIEFycmF5IG9mIExpbmVhclJpbmdzLlxuICpcbiAqIEBuYW1lIHBvbHlnb25cbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lYXJSaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvbHlnb24+fSBQb2x5Z29uIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNSwgNTJdLCBbLTQsIDU2XSwgWy0yLCA1MV0sIFstNywgNTRdLCBbLTUsIDUyXV1dLCB7IG5hbWU6ICdwb2x5MScgfSk7XG4gKlxuICogLy89cG9seWdvblxuICovXG5mdW5jdGlvbiBwb2x5Z29uKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmluZyA9IGNvb3JkaW5hdGVzW2ldO1xuICAgICAgICBpZiAocmluZy5sZW5ndGggPCA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VhY2ggTGluZWFyUmluZyBvZiBhIFBvbHlnb24gbXVzdCBoYXZlIDQgb3IgbW9yZSBQb3NpdGlvbnMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByaW5nW3JpbmcubGVuZ3RoIC0gMV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGZpcnN0IHBvaW50IG9mIFBvbHlnb24gY29udGFpbnMgdHdvIG51bWJlcnNcbiAgICAgICAgICAgIGlmIChpID09PSAwICYmIGogPT09IDAgJiYgIWlzTnVtYmVyKHJpbmdbMF1bMF0pIHx8ICFpc051bWJlcihyaW5nWzBdWzFdKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycycpO1xuICAgICAgICAgICAgaWYgKHJpbmdbcmluZy5sZW5ndGggLSAxXVtqXSAhPT0gcmluZ1swXVtqXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9seWdvbn0ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIFBvbHlnb24gY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgcG9seWdvbnNcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9seWdvbiBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbj59IFBvbHlnb24gRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbnMgPSB0dXJmLnBvbHlnb25zKFtcbiAqICAgW1tbLTUsIDUyXSwgWy00LCA1Nl0sIFstMiwgNTFdLCBbLTcsIDU0XSwgWy01LCA1Ml1dXSxcbiAqICAgW1tbLTE1LCA0Ml0sIFstMTQsIDQ2XSwgWy0xMiwgNDFdLCBbLTE3LCA0NF0sIFstMTUsIDQyXV1dLFxuICogXSk7XG4gKlxuICogLy89cG9seWdvbnNcbiAqL1xuZnVuY3Rpb24gcG9seWdvbnMoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIHBvbHlnb24oY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBMaW5lU3RyaW5nfSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhbiBBcnJheSBvZiBQb3NpdGlvbnMuXG4gKlxuICogQG5hbWUgbGluZVN0cmluZ1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9zaXRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TGluZVN0cmluZz59IExpbmVTdHJpbmcgRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lc3RyaW5nMSA9IHR1cmYubGluZVN0cmluZyhbWy0yNCwgNjNdLCBbLTIzLCA2MF0sIFstMjUsIDY1XSwgWy0yMCwgNjldXSwge25hbWU6ICdsaW5lIDEnfSk7XG4gKiB2YXIgbGluZXN0cmluZzIgPSB0dXJmLmxpbmVTdHJpbmcoW1stMTQsIDQzXSwgWy0xMywgNDBdLCBbLTE1LCA0NV0sIFstMTAsIDQ5XV0sIHtuYW1lOiAnbGluZSAyJ30pO1xuICpcbiAqIC8vPWxpbmVzdHJpbmcxXG4gKiAvLz1saW5lc3RyaW5nMlxuICovXG5mdW5jdGlvbiBsaW5lU3RyaW5nKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChjb29yZGluYXRlcy5sZW5ndGggPCAyKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgdHdvIG9yIG1vcmUgcG9zaXRpb25zJyk7XG4gICAgLy8gQ2hlY2sgaWYgZmlyc3QgcG9pbnQgb2YgTGluZVN0cmluZyBjb250YWlucyB0d28gbnVtYmVyc1xuICAgIGlmICghaXNOdW1iZXIoY29vcmRpbmF0ZXNbMF1bMV0pIHx8ICFpc051bWJlcihjb29yZGluYXRlc1swXVsxXSkpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBjb250YWluIG51bWJlcnMnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIExpbmVTdHJpbmd9IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBMaW5lU3RyaW5nIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIGxpbmVTdHJpbmdzXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lYXJSaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPExpbmVTdHJpbmc+fSBMaW5lU3RyaW5nIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmVzdHJpbmdzID0gdHVyZi5saW5lU3RyaW5ncyhbXG4gKiAgIFtbLTI0LCA2M10sIFstMjMsIDYwXSwgWy0yNSwgNjVdLCBbLTIwLCA2OV1dLFxuICogICBbWy0xNCwgNDNdLCBbLTEzLCA0MF0sIFstMTUsIDQ1XSwgWy0xMCwgNDldXVxuICogXSk7XG4gKlxuICogLy89bGluZXN0cmluZ3NcbiAqL1xuZnVuY3Rpb24gbGluZVN0cmluZ3MoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGFrZXMgb25lIG9yIG1vcmUge0BsaW5rIEZlYXR1cmV8RmVhdHVyZXN9IGFuZCBjcmVhdGVzIGEge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufS5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtGZWF0dXJlW119IGZlYXR1cmVzIGlucHV0IGZlYXR1cmVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbn0gRmVhdHVyZUNvbGxlY3Rpb24gb2YgRmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiB2YXIgbG9jYXRpb25BID0gdHVyZi5wb2ludChbLTc1LjM0MywgMzkuOTg0XSwge25hbWU6ICdMb2NhdGlvbiBBJ30pO1xuICogdmFyIGxvY2F0aW9uQiA9IHR1cmYucG9pbnQoWy03NS44MzMsIDM5LjI4NF0sIHtuYW1lOiAnTG9jYXRpb24gQid9KTtcbiAqIHZhciBsb2NhdGlvbkMgPSB0dXJmLnBvaW50KFstNzUuNTM0LCAzOS4xMjNdLCB7bmFtZTogJ0xvY2F0aW9uIEMnfSk7XG4gKlxuICogdmFyIGNvbGxlY3Rpb24gPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgbG9jYXRpb25BLFxuICogICBsb2NhdGlvbkIsXG4gKiAgIGxvY2F0aW9uQ1xuICogXSk7XG4gKlxuICogLy89Y29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBmZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcywgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBiYm94ID0gb3B0aW9ucy5iYm94O1xuICAgIHZhciBpZCA9IG9wdGlvbnMuaWQ7XG5cbiAgICAvLyBWYWxpZGF0aW9uXG4gICAgaWYgKCFmZWF0dXJlcykgdGhyb3cgbmV3IEVycm9yKCdObyBmZWF0dXJlcyBwYXNzZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmVhdHVyZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2ZlYXR1cmVzIG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICBpZiAoYmJveCkgdmFsaWRhdGVCQm94KGJib3gpO1xuICAgIGlmIChpZCkgdmFsaWRhdGVJZChpZCk7XG5cbiAgICAvLyBNYWluXG4gICAgdmFyIGZjID0ge3R5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbid9O1xuICAgIGlmIChpZCkgZmMuaWQgPSBpZDtcbiAgICBpZiAoYmJveCkgZmMuYmJveCA9IGJib3g7XG4gICAgZmMuZmVhdHVyZXMgPSBmZWF0dXJlcztcbiAgICByZXR1cm4gZmM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpTGluZVN0cmluZz59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlMaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZVN0cmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aUxpbmVTdHJpbmc+fSBhIE11bHRpTGluZVN0cmluZyBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbW1swLDBdLFsxMCwxMF1dXSk7XG4gKlxuICogLy89bXVsdGlMaW5lXG4gKi9cbmZ1bmN0aW9uIG11bHRpTGluZVN0cmluZyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ011bHRpTGluZVN0cmluZycsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aVBvaW50Pn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aVBvaW50XG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb3NpdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aVBvaW50Pn0gYSBNdWx0aVBvaW50IGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUHQgPSB0dXJmLm11bHRpUG9pbnQoW1swLDBdLFsxMCwxMF1dKTtcbiAqXG4gKiAvLz1tdWx0aVB0XG4gKi9cbmZ1bmN0aW9uIG11bHRpUG9pbnQoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdNdWx0aVBvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpUG9seWdvbj59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlQb2x5Z29uXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvbHlnb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlQb2x5Z29uPn0gYSBtdWx0aXBvbHlnb24gZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQb2x5ID0gdHVyZi5tdWx0aVBvbHlnb24oW1tbWzAsMF0sWzAsMTBdLFsxMCwxMF0sWzEwLDBdLFswLDBdXV1dKTtcbiAqXG4gKiAvLz1tdWx0aVBvbHlcbiAqXG4gKi9cbmZ1bmN0aW9uIG11bHRpUG9seWdvbihjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ011bHRpUG9seWdvbicsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxHZW9tZXRyeUNvbGxlY3Rpb24+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIGdlb21ldHJ5Q29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheTxHZW9tZXRyeT59IGdlb21ldHJpZXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBHZW9tZXRyaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8R2VvbWV0cnlDb2xsZWN0aW9uPn0gYSBHZW9KU09OIEdlb21ldHJ5Q29sbGVjdGlvbiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHB0ID0ge1xuICogICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgICBcImNvb3JkaW5hdGVzXCI6IFsxMDAsIDBdXG4gKiAgICAgfTtcbiAqIHZhciBsaW5lID0ge1xuICogICAgIFwidHlwZVwiOiBcIkxpbmVTdHJpbmdcIixcbiAqICAgICBcImNvb3JkaW5hdGVzXCI6IFsgWzEwMSwgMF0sIFsxMDIsIDFdIF1cbiAqICAgfTtcbiAqIHZhciBjb2xsZWN0aW9uID0gdHVyZi5nZW9tZXRyeUNvbGxlY3Rpb24oW3B0LCBsaW5lXSk7XG4gKlxuICogLy89Y29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBnZW9tZXRyeUNvbGxlY3Rpb24oZ2VvbWV0cmllcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghZ2VvbWV0cmllcykgdGhyb3cgbmV3IEVycm9yKCdnZW9tZXRyaWVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGdlb21ldHJpZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb21ldHJpZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnR2VvbWV0cnlDb2xsZWN0aW9uJyxcbiAgICAgICAgZ2VvbWV0cmllczogZ2VvbWV0cmllc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJvdW5kIG51bWJlciB0byBwcmVjaXNpb25cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtIE51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gUHJlY2lzaW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSByb3VuZGVkIG51bWJlclxuICogQGV4YW1wbGVcbiAqIHR1cmYucm91bmQoMTIwLjQzMjEpXG4gKiAvLz0xMjBcbiAqXG4gKiB0dXJmLnJvdW5kKDEyMC40MzIxLCAyKVxuICogLy89MTIwLjQzXG4gKi9cbmZ1bmN0aW9uIHJvdW5kKG51bSwgcHJlY2lzaW9uKSB7XG4gICAgaWYgKG51bSA9PT0gdW5kZWZpbmVkIHx8IG51bSA9PT0gbnVsbCB8fCBpc05hTihudW0pKSB0aHJvdyBuZXcgRXJyb3IoJ251bSBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChwcmVjaXNpb24gJiYgIShwcmVjaXNpb24gPj0gMCkpIHRocm93IG5ldyBFcnJvcigncHJlY2lzaW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgICB2YXIgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24gfHwgMCk7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogbXVsdGlwbGllcikgLyBtdWx0aXBsaWVyO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gcmFkaWFucyB0byBhIG1vcmUgZnJpZW5kbHkgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQG5hbWUgcmFkaWFuc1RvTGVuZ3RoXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyBpbiByYWRpYW5zIGFjcm9zcyB0aGUgc3BoZXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPSdraWxvbWV0ZXJzJ10gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcywgbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gZGlzdGFuY2VcbiAqL1xuZnVuY3Rpb24gcmFkaWFuc1RvTGVuZ3RoKHJhZGlhbnMsIHVuaXRzKSB7XG4gICAgaWYgKHJhZGlhbnMgPT09IHVuZGVmaW5lZCB8fCByYWRpYW5zID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ3JhZGlhbnMgaXMgcmVxdWlyZWQnKTtcblxuICAgIGlmICh1bml0cyAmJiB0eXBlb2YgdW5pdHMgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgRXJyb3IoJ3VuaXRzIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB2YXIgZmFjdG9yID0gZmFjdG9yc1t1bml0cyB8fCAna2lsb21ldGVycyddO1xuICAgIGlmICghZmFjdG9yKSB0aHJvdyBuZXcgRXJyb3IodW5pdHMgKyAnIHVuaXRzIGlzIGludmFsaWQnKTtcbiAgICByZXR1cm4gcmFkaWFucyAqIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIGEgcmVhbC13b3JsZCB1bml0IGludG8gcmFkaWFuc1xuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAbmFtZSBsZW5ndGhUb1JhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBpbiByZWFsIHVuaXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPSdraWxvbWV0ZXJzJ10gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcywgbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gcmFkaWFuc1xuICovXG5mdW5jdGlvbiBsZW5ndGhUb1JhZGlhbnMoZGlzdGFuY2UsIHVuaXRzKSB7XG4gICAgaWYgKGRpc3RhbmNlID09PSB1bmRlZmluZWQgfHwgZGlzdGFuY2UgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignZGlzdGFuY2UgaXMgcmVxdWlyZWQnKTtcblxuICAgIGlmICh1bml0cyAmJiB0eXBlb2YgdW5pdHMgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgRXJyb3IoJ3VuaXRzIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB2YXIgZmFjdG9yID0gZmFjdG9yc1t1bml0cyB8fCAna2lsb21ldGVycyddO1xuICAgIGlmICghZmFjdG9yKSB0aHJvdyBuZXcgRXJyb3IodW5pdHMgKyAnIHVuaXRzIGlzIGludmFsaWQnKTtcbiAgICByZXR1cm4gZGlzdGFuY2UgLyBmYWN0b3I7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSBhIHJlYWwtd29ybGQgdW5pdCBpbnRvIGRlZ3JlZXNcbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGNlbnRpbWV0ZXJzLCBraWxvbWV0cmVzLCBmZWV0XG4gKlxuICogQG5hbWUgbGVuZ3RoVG9EZWdyZWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgaW4gcmVhbCB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz0na2lsb21ldGVycyddIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gbGVuZ3RoVG9EZWdyZWVzKGRpc3RhbmNlLCB1bml0cykge1xuICAgIHJldHVybiByYWRpYW5zVG9EZWdyZWVzKGxlbmd0aFRvUmFkaWFucyhkaXN0YW5jZSwgdW5pdHMpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbnkgYmVhcmluZyBhbmdsZSBmcm9tIHRoZSBub3J0aCBsaW5lIGRpcmVjdGlvbiAocG9zaXRpdmUgY2xvY2t3aXNlKVxuICogYW5kIHJldHVybnMgYW4gYW5nbGUgYmV0d2VlbiAwLTM2MCBkZWdyZWVzIChwb3NpdGl2ZSBjbG9ja3dpc2UpLCAwIGJlaW5nIHRoZSBub3J0aCBsaW5lXG4gKlxuICogQG5hbWUgYmVhcmluZ1RvQXppbXV0aFxuICogQHBhcmFtIHtudW1iZXJ9IGJlYXJpbmcgYW5nbGUsIGJldHdlZW4gLTE4MCBhbmQgKzE4MCBkZWdyZWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIGJlYXJpbmdUb0F6aW11dGgoYmVhcmluZykge1xuICAgIGlmIChiZWFyaW5nID09PSBudWxsIHx8IGJlYXJpbmcgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdiZWFyaW5nIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB2YXIgYW5nbGUgPSBiZWFyaW5nICUgMzYwO1xuICAgIGlmIChhbmdsZSA8IDApIGFuZ2xlICs9IDM2MDtcbiAgICByZXR1cm4gYW5nbGU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYW5nbGUgaW4gcmFkaWFucyB0byBkZWdyZWVzXG4gKlxuICogQG5hbWUgcmFkaWFuc1RvRGVncmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgYW5nbGUgaW4gcmFkaWFuc1xuICogQHJldHVybnMge251bWJlcn0gZGVncmVlcyBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIHJhZGlhbnNUb0RlZ3JlZXMocmFkaWFucykge1xuICAgIGlmIChyYWRpYW5zID09PSBudWxsIHx8IHJhZGlhbnMgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdyYWRpYW5zIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB2YXIgZGVncmVlcyA9IHJhZGlhbnMgJSAoMiAqIE1hdGguUEkpO1xuICAgIHJldHVybiBkZWdyZWVzICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbmdsZSBpbiBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqXG4gKiBAbmFtZSBkZWdyZWVzVG9SYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gZGVncmVlcyBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbmdsZSBpbiByYWRpYW5zXG4gKi9cbmZ1bmN0aW9uIGRlZ3JlZXNUb1JhZGlhbnMoZGVncmVlcykge1xuICAgIGlmIChkZWdyZWVzID09PSBudWxsIHx8IGRlZ3JlZXMgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdkZWdyZWVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB2YXIgcmFkaWFucyA9IGRlZ3JlZXMgJSAzNjA7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBNYXRoLlBJIC8gMTgwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbGVuZ3RoIHRvIHRoZSByZXF1ZXN0ZWQgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbFVuaXQgb2YgdGhlIGxlbmd0aFxuICogQHBhcmFtIHtzdHJpbmd9IFtmaW5hbFVuaXQ9J2tpbG9tZXRlcnMnXSByZXR1cm5lZCB1bml0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgY29udmVydGVkIGxlbmd0aFxuICovXG5mdW5jdGlvbiBjb252ZXJ0TGVuZ3RoKGxlbmd0aCwgb3JpZ2luYWxVbml0LCBmaW5hbFVuaXQpIHtcbiAgICBpZiAobGVuZ3RoID09PSBudWxsIHx8IGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghKGxlbmd0aCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuXG4gICAgcmV0dXJuIHJhZGlhbnNUb0xlbmd0aChsZW5ndGhUb1JhZGlhbnMobGVuZ3RoLCBvcmlnaW5hbFVuaXQpLCBmaW5hbFVuaXQgfHwgJ2tpbG9tZXRlcnMnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGFyZWEgdG8gdGhlIHJlcXVlc3RlZCB1bml0LlxuICogVmFsaWQgdW5pdHM6IGtpbG9tZXRlcnMsIGtpbG9tZXRyZXMsIG1ldGVycywgbWV0cmVzLCBjZW50aW1ldHJlcywgbWlsbGltZXRlcnMsIGFjcmVzLCBtaWxlcywgeWFyZHMsIGZlZXQsIGluY2hlc1xuICogQHBhcmFtIHtudW1iZXJ9IGFyZWEgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gW29yaWdpbmFsVW5pdD0nbWV0ZXJzJ10gb2YgdGhlIGRpc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZpbmFsVW5pdD0na2lsb21ldGVycyddIHJldHVybmVkIHVuaXRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBjb252ZXJ0ZWQgZGlzdGFuY2VcbiAqL1xuZnVuY3Rpb24gY29udmVydEFyZWEoYXJlYSwgb3JpZ2luYWxVbml0LCBmaW5hbFVuaXQpIHtcbiAgICBpZiAoYXJlYSA9PT0gbnVsbCB8fCBhcmVhID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignYXJlYSBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghKGFyZWEgPj0gMCkpIHRocm93IG5ldyBFcnJvcignYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG5cbiAgICB2YXIgc3RhcnRGYWN0b3IgPSBhcmVhRmFjdG9yc1tvcmlnaW5hbFVuaXQgfHwgJ21ldGVycyddO1xuICAgIGlmICghc3RhcnRGYWN0b3IpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvcmlnaW5hbCB1bml0cycpO1xuXG4gICAgdmFyIGZpbmFsRmFjdG9yID0gYXJlYUZhY3RvcnNbZmluYWxVbml0IHx8ICdraWxvbWV0ZXJzJ107XG4gICAgaWYgKCFmaW5hbEZhY3RvcikgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZpbmFsIHVuaXRzJyk7XG5cbiAgICByZXR1cm4gKGFyZWEgLyBzdGFydEZhY3RvcikgKiBmaW5hbEZhY3Rvcjtcbn1cblxuLyoqXG4gKiBpc051bWJlclxuICpcbiAqIEBwYXJhbSB7Kn0gbnVtIE51bWJlciB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiB0dXJmLmlzTnVtYmVyKDEyMylcbiAqIC8vPXRydWVcbiAqIHR1cmYuaXNOdW1iZXIoJ2ZvbycpXG4gKiAvLz1mYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcihudW0pIHtcbiAgICByZXR1cm4gIWlzTmFOKG51bSkgJiYgbnVtICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KG51bSk7XG59XG5cbi8qKlxuICogaXNPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IGlucHV0IHZhcmlhYmxlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIHR1cmYuaXNPYmplY3Qoe2VsZXZhdGlvbjogMTB9KVxuICogLy89dHJ1ZVxuICogdHVyZi5pc09iamVjdCgnZm9vJylcbiAqIC8vPWZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgcmV0dXJuICghIWlucHV0KSAmJiAoaW5wdXQuY29uc3RydWN0b3IgPT09IE9iamVjdCk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgQkJveFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGJib3ggQkJveCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIEVycm9yIGlmIEJCb3ggaXMgbm90IHZhbGlkXG4gKiBAZXhhbXBsZVxuICogdmFsaWRhdGVCQm94KFstMTgwLCAtNDAsIDExMCwgNTBdKVxuICogLy89T0tcbiAqIHZhbGlkYXRlQkJveChbLTE4MCwgLTQwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3goJ0ZvbycpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KDUpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KG51bGwpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KHVuZGVmaW5lZClcbiAqIC8vPUVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQkJveChiYm94KSB7XG4gICAgaWYgKCFiYm94KSB0aHJvdyBuZXcgRXJyb3IoJ2Jib3ggaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYmJveCkpIHRocm93IG5ldyBFcnJvcignYmJveCBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgaWYgKGJib3gubGVuZ3RoICE9PSA0ICYmIGJib3gubGVuZ3RoICE9PSA2KSB0aHJvdyBuZXcgRXJyb3IoJ2Jib3ggbXVzdCBiZSBhbiBBcnJheSBvZiA0IG9yIDYgbnVtYmVycycpO1xuICAgIGJib3guZm9yRWFjaChmdW5jdGlvbiAobnVtKSB7XG4gICAgICAgIGlmICghaXNOdW1iZXIobnVtKSkgdGhyb3cgbmV3IEVycm9yKCdiYm94IG11c3Qgb25seSBjb250YWluIG51bWJlcnMnKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBJZFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIElkIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3MgRXJyb3IgaWYgSWQgaXMgbm90IHZhbGlkXG4gKiBAZXhhbXBsZVxuICogdmFsaWRhdGVJZChbLTE4MCwgLTQwLCAxMTAsIDUwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKFstMTgwLCAtNDBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQoJ0ZvbycpXG4gKiAvLz1PS1xuICogdmFsaWRhdGVJZCg1KVxuICogLy89T0tcbiAqIHZhbGlkYXRlSWQobnVsbClcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKHVuZGVmaW5lZClcbiAqIC8vPUVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWQpIHtcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgRXJyb3IoJ2lkIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKFsnc3RyaW5nJywgJ251bWJlciddLmluZGV4T2YodHlwZW9mIGlkKSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignaWQgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZycpO1xufVxuXG4vLyBEZXByZWNhdGVkIG1ldGhvZHNcbmZ1bmN0aW9uIHJhZGlhbnMyZGVncmVlcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGByYWRpYW5zVG9EZWdyZWVzYCcpO1xufVxuXG5mdW5jdGlvbiBkZWdyZWVzMnJhZGlhbnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgZGVncmVlc1RvUmFkaWFuc2AnKTtcbn1cblxuZnVuY3Rpb24gZGlzdGFuY2VUb0RlZ3JlZXMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9EZWdyZWVzYCcpO1xufVxuXG5mdW5jdGlvbiBkaXN0YW5jZVRvUmFkaWFucygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBsZW5ndGhUb1JhZGlhbnNgJyk7XG59XG5cbmZ1bmN0aW9uIHJhZGlhbnNUb0Rpc3RhbmNlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHJhZGlhbnNUb0xlbmd0aGAnKTtcbn1cblxuZnVuY3Rpb24gYmVhcmluZ1RvQW5nbGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgYmVhcmluZ1RvQXppbXV0aGAnKTtcbn1cblxuZnVuY3Rpb24gY29udmVydERpc3RhbmNlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbnZlcnRMZW5ndGhgJyk7XG59XG5cbmV4cG9ydCB7IGVhcnRoUmFkaXVzLCBmYWN0b3JzLCB1bml0c0ZhY3RvcnMsIGFyZWFGYWN0b3JzLCBmZWF0dXJlLCBnZW9tZXRyeSwgcG9pbnQsIHBvaW50cywgcG9seWdvbiwgcG9seWdvbnMsIGxpbmVTdHJpbmcsIGxpbmVTdHJpbmdzLCBmZWF0dXJlQ29sbGVjdGlvbiwgbXVsdGlMaW5lU3RyaW5nLCBtdWx0aVBvaW50LCBtdWx0aVBvbHlnb24sIGdlb21ldHJ5Q29sbGVjdGlvbiwgcm91bmQsIHJhZGlhbnNUb0xlbmd0aCwgbGVuZ3RoVG9SYWRpYW5zLCBsZW5ndGhUb0RlZ3JlZXMsIGJlYXJpbmdUb0F6aW11dGgsIHJhZGlhbnNUb0RlZ3JlZXMsIGRlZ3JlZXNUb1JhZGlhbnMsIGNvbnZlcnRMZW5ndGgsIGNvbnZlcnRBcmVhLCBpc051bWJlciwgaXNPYmplY3QsIHZhbGlkYXRlQkJveCwgdmFsaWRhdGVJZCwgcmFkaWFuczJkZWdyZWVzLCBkZWdyZWVzMnJhZGlhbnMsIGRpc3RhbmNlVG9EZWdyZWVzLCBkaXN0YW5jZVRvUmFkaWFucywgcmFkaWFuc1RvRGlzdGFuY2UsIGJlYXJpbmdUb0FuZ2xlLCBjb252ZXJ0RGlzdGFuY2UgfTtcbiIsImltcG9ydCB7IGdldFByb3AsIHBhcnNlU2VxdWVuY2UsIGdldENvbG9yLCBjaXJjbGVUb1BvbHlnb24gfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgcG9pbnQsIGxpbmVTdHJpbmcsIHBvbHlnb24gfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCB0cmFuc2Zvcm1UcmFuc2xhdGUgZnJvbSAnQHR1cmYvdHJhbnNmb3JtLXRyYW5zbGF0ZSc7XG5pbXBvcnQgY2xvbmUgZnJvbSAnQHR1cmYvY2xvbmUnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmV4cG9ydCBjb25zdCBMQU5EWE1MX1BJUEVfTkVUV09SS19QSVBFID0gJ3BpcGVfbmV0d29ya19waXBlJztcbmV4cG9ydCBjb25zdCBMQU5EWE1MX1BJUEVfTkVUV09SS19TVFJVQ1QgPSAncGlwZV9uZXR3b3JrX3N0cnVjdCc7XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFBpcGVOZXR3b3Jrcyh4bWxPYmosIHByb2plY3Rpb24sIG9wdHMpIHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IFtdO1xuICAgIGNvbnN0IHBpcGVOZXR3b3Jrc05vZGVzID0gZ2V0UHJvcCh4bWxPYmosIFwiTGFuZFhNTFwiLCBcIlBpcGVOZXR3b3Jrc1wiKTtcbiAgICBpZiAoIXBpcGVOZXR3b3Jrc05vZGVzKVxuICAgICAgICByZXR1cm4gZmVhdHVyZXM7XG4gICAgcGlwZU5ldHdvcmtzTm9kZXMuZm9yRWFjaChwbiA9PiB7XG4gICAgICAgIGNvbnN0IHBpcGVOZXR3b3JrTm9kZXMgPSBnZXRQcm9wKHBuLCBcIlBpcGVOZXR3b3JrXCIpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGlwZU5ldHdvcmtOb2RlcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBzdHJ1Y3RzID0ge307XG4gICAgICAgIHBpcGVOZXR3b3JrTm9kZXMuZm9yRWFjaChwbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlUHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogcG4uJC5uYW1lLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwbi4kLmRlc2MsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbG9jYWxTdHJ1Y3RzID0gY29udmVydFN0cnVjdHMocG4sIHByb2plY3Rpb24sIGJhc2VQcm9wcywgb3B0cyk7XG4gICAgICAgICAgICBmZWF0dXJlcy5wdXNoKC4uLk9iamVjdC52YWx1ZXMobG9jYWxTdHJ1Y3RzKS5tYXAocyA9PiBzLmdlb21ldHJ5KSk7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0cnVjdHMsIGxvY2FsU3RydWN0cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBwaXBlTmV0d29ya05vZGVzLmZvckVhY2gocG4gPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZVByb3BzID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IHBuLiQubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcG4uJC5kZXNjLFxuICAgICAgICAgICAgICAgIGxhbmR4bWxUeXBlOiBMQU5EWE1MX1BJUEVfTkVUV09SS19QSVBFLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHBpcGVzID0gY29udmVydFBpcGVzKHBuLCBzdHJ1Y3RzLCBwcm9qZWN0aW9uLCBiYXNlUHJvcHMsIG9wdHMpO1xuICAgICAgICAgICAgZmVhdHVyZXMucHVzaCguLi5waXBlcyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmZWF0dXJlcztcbn1cbmZ1bmN0aW9uIGNvbnZlcnRQaXBlcyhwaXBlTmV0d29yaywgc3RydWN0cywgcHJvamVjdGlvbiwgYmFzZVByb3BzLCBvcHRzKSB7XG4gICAgY29uc3QgcGlwZXMgPSBbXTtcbiAgICBjb25zdCBwaXBlTm9kZXMgPSBnZXRQcm9wKHBpcGVOZXR3b3JrLCBcIlBpcGVzXCIsIDAsIFwiUGlwZVwiKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGlwZU5vZGVzKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIHBpcGVOb2Rlcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICBjb25zdCBjaXJjUGlwZU5vZGUgPSBnZXRQcm9wKHAsIFwiQ2lyY1BpcGVcIiwgMCk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBiYXNlUHJvcHMubmFtZSA/IGJhc2VQcm9wcy5uYW1lICsgJyAtICcgKyBwLiQubmFtZSA6IHAuJC5uYW1lO1xuICAgICAgICBjb25zdCBmZWF0dXJlUHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBiYXNlUHJvcHMsIHtcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYmFzZVByb3BzLmRlc2NyaXB0aW9uID8gYmFzZVByb3BzLmRlc2NyaXB0aW9uICsgJyAtICcgKyBwLiQuZGVzYyA6IHAuJC5kZXNjLFxuICAgICAgICAgICAgbGFuZHhtbENvbG9yOiBnZXRDb2xvcihgcGlwZS1uZXR3b3JrLXBpcGUtJHtuYW1lfWAsIG9wdHMuY29sb3JPcHRzKVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNpcmNQaXBlTm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRycyA9IGNpcmNQaXBlTm9kZS4kO1xuICAgICAgICAgICAgaWYgKCdkaWFtZXRlcicgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxEaWFtZXRlciA9IHBhcnNlRmxvYXQoYXR0cnMuZGlhbWV0ZXIpO1xuICAgICAgICAgICAgaWYgKCd0aGlja25lc3MnIGluIGF0dHJzKVxuICAgICAgICAgICAgICAgIGZlYXR1cmVQcm9wcy5sYW5keG1sVGhpY2tuZXNzID0gcGFyc2VGbG9hdChhdHRycy50aGlja25lc3MpO1xuICAgICAgICAgICAgaWYgKCdtYXRlcmlhbCcgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxNYXRlcmlhbCA9IGF0dHJzLm1hdGVyaWFsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlZlN0YXJ0ID0gc3RydWN0c1twLiQucmVmU3RhcnRdO1xuICAgICAgICBjb25zdCByZWZFbmQgPSBzdHJ1Y3RzW3AuJC5yZWZFbmRdO1xuICAgICAgICBpZiAoIXJlZlN0YXJ0KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBwaXBlIFwiJHtmZWF0dXJlUHJvcHMubmFtZX1cIiByZWZTdGFydCBcIiR7cC4kLnJlZlN0YXJ0fVwiICFgKTtcbiAgICAgICAgaWYgKCFyZWZFbmQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHBpcGUgXCIke2ZlYXR1cmVQcm9wcy5uYW1lfVwiIHJlZkVuZCBcIiR7cC4kLnJlZkVuZH1cIiAhYCk7XG4gICAgICAgIGNvbnN0IHBpcGUgPSBsaW5lU3RyaW5nKFtcbiAgICAgICAgICAgIHJlZlN0YXJ0LmNlbnRlcixcbiAgICAgICAgICAgIHJlZkVuZC5jZW50ZXIsXG4gICAgICAgIF0sIGZlYXR1cmVQcm9wcyk7XG4gICAgICAgIHBpcGVzLnB1c2gocGlwZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBpcGVzO1xufVxuZnVuY3Rpb24gY29udmVydFN0cnVjdHMocGlwZU5ldHdvcmssIHByb2plY3Rpb24sIGJhc2VQcm9wcywgb3B0cykge1xuICAgIGNvbnN0IHN0cnVjdHMgPSB7fTtcbiAgICBjb25zdCBzdHJ1Y3ROb2RlcyA9IGdldFByb3AocGlwZU5ldHdvcmssIFwiU3RydWN0c1wiLCAwLCBcIlN0cnVjdFwiKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3RydWN0Tm9kZXMpKVxuICAgICAgICByZXR1cm47XG4gICAgc3RydWN0Tm9kZXMuZm9yRWFjaChzID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyTm9kZSA9IGdldFByb3AocywgXCJDZW50ZXJcIiwgMCk7XG4gICAgICAgIGNvbnN0IHJlY3RTdHJ1Y3ROb2RlID0gZ2V0UHJvcChzLCBcIlJlY3RTdHJ1Y3RcIiwgMCk7XG4gICAgICAgIGNvbnN0IGNpcmNTdHJ1Y3ROb2RlID0gZ2V0UHJvcChzLCBcIkNpcmNTdHJ1Y3RcIiwgMCk7XG4gICAgICAgIGNvbnN0IGlubGV0U3RydWN0Tm9kZSA9IGdldFByb3AocywgXCJJbmxldFN0cnVjdFwiLCAwKTtcbiAgICAgICAgY29uc3Qgb3V0bGV0U3RydWN0Tm9kZSA9IGdldFByb3AocywgXCJPdXRsZXRTdHJ1Y3RcIiwgMCk7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Ob2RlID0gZ2V0UHJvcChzLCBcIkNvbm5lY3Rpb25cIiwgMCk7XG4gICAgICAgIGNvbnN0IHN0cnVjdFR5cGUgPSByZWN0U3RydWN0Tm9kZSAhPT0gdW5kZWZpbmVkID8gXCJyZWN0XCIgOiAoKGNpcmNTdHJ1Y3ROb2RlICE9PSB1bmRlZmluZWQgPyBcImNpcmNcIiA6XG4gICAgICAgICAgICAoaW5sZXRTdHJ1Y3ROb2RlICE9PSB1bmRlZmluZWQgPyBcImlubGV0XCIgOlxuICAgICAgICAgICAgICAgIChvdXRsZXRTdHJ1Y3ROb2RlICE9PSB1bmRlZmluZWQgPyBcIm91dGxldFwiIDpcbiAgICAgICAgICAgICAgICAgICAgKGNvbm5lY3Rpb25Ob2RlICE9PSB1bmRlZmluZWQgPyBcImNvbm5lY3Rpb25cIiA6XG4gICAgICAgICAgICAgICAgICAgICAgICAobnVsbCkpKSkpKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGJhc2VQcm9wcy5uYW1lID8gYmFzZVByb3BzLm5hbWUgKyAnIC0gJyArIHMuJC5uYW1lIDogcy4kLm5hbWU7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIGJhc2VQcm9wcywge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBiYXNlUHJvcHMuZGVzY3JpcHRpb24gPyBiYXNlUHJvcHMuZGVzY3JpcHRpb24gKyAnIC0gJyArIHMuJC5kZXNjIDogcy4kLmRlc2MsXG4gICAgICAgICAgICBsYW5keG1sVHlwZTogTEFORFhNTF9QSVBFX05FVFdPUktfU1RSVUNULFxuICAgICAgICAgICAgbGFuZHhtbFN0cnVjdDogc3RydWN0VHlwZSxcbiAgICAgICAgICAgIGxhbmR4bWxFbGV2UmltOiAnZWxldlJpbScgaW4gcy4kID8gcGFyc2VGbG9hdChzLiQuZWxldlJpbSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBsYW5keG1sRWxldlN1bXA6ICdlbGV2U3VtcCcgaW4gcy4kID8gcGFyc2VGbG9hdChzLiQuZWxldlN1bXApIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbGFuZHhtbENvbG9yOiBnZXRDb2xvcihgcGlwZS1uZXR3b3JrLXN0cnVjdC0ke25hbWV9YCwgb3B0cy5jb2xvck9wdHMpXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2lyY1N0cnVjdE5vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYXR0cnMgPSBjaXJjU3RydWN0Tm9kZS4kO1xuICAgICAgICAgICAgaWYgKCdkaWFtZXRlcicgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxEaWFtZXRlciA9IHBhcnNlRmxvYXQoYXR0cnMuZGlhbWV0ZXIpO1xuICAgICAgICAgICAgaWYgKCd0aGlja25lc3MnIGluIGF0dHJzKVxuICAgICAgICAgICAgICAgIGZlYXR1cmVQcm9wcy5sYW5keG1sVGhpY2tuZXNzID0gcGFyc2VGbG9hdChhdHRycy50aGlja25lc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWN0U3RydWN0Tm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRycyA9IHJlY3RTdHJ1Y3ROb2RlLiQ7XG4gICAgICAgICAgICBpZiAoJ3RoaWNrbmVzcycgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxUaGlja25lc3MgPSBwYXJzZUZsb2F0KGF0dHJzLnRoaWNrbmVzcyk7XG4gICAgICAgICAgICBpZiAoJ2xlbmd0aCcgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxMZW5ndGggPSBwYXJzZUZsb2F0KGF0dHJzLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoJ3dpZHRoJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbFdpZHRoID0gcGFyc2VGbG9hdChhdHRycy53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGFyc2UgYW5kIGNvbnZlcnQgY2VudGVyIGNvb3JkaW5hdGVzXG4gICAgICAgIGNvbnN0IHNlcSA9IHBhcnNlU2VxdWVuY2UoY2VudGVyTm9kZSkubWFwKHYgPT4gcGFyc2VGbG9hdCh2KSk7XG4gICAgICAgIGxldCBjZW50ZXIgPSBbc2VxWzFdLCBzZXFbMF0sIHNlcVsyXV07XG4gICAgICAgIGNlbnRlciA9IHByb2o0KHByb2plY3Rpb24sICdXR1M4NCcsIGNlbnRlcik7XG4gICAgICAgIGZlYXR1cmVQcm9wcy5sYW5keG1sQ2VudGVyTG9uZ2l0dWRlID0gY2VudGVyWzBdO1xuICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbENlbnRlckxhdGl0dWRlID0gY2VudGVyWzFdO1xuICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbENlbnRlckFsdGl0dWRlID0gY2VudGVyWzJdO1xuICAgICAgICBsZXQgZ2VvbWV0cnk7XG4gICAgICAgIGlmIChyZWN0U3RydWN0Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gZmVhdHVyZVByb3BzLmxlbmd0aCA/IGZlYXR1cmVQcm9wcy5sZW5ndGggOiAxO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBmZWF0dXJlUHJvcHMud2lkdGggPyBmZWF0dXJlUHJvcHMud2lkdGggOiAxO1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSBzcXVhcmVBcm91bmQoY2VudGVyLCBsZW5ndGgsIHdpZHRoLCAnbWV0ZXJzJywgZmVhdHVyZVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYW1ldGVyID0gZmVhdHVyZVByb3BzLmxhbmR4bWxEaWFtZXRlciA/IGZlYXR1cmVQcm9wcy5sYW5keG1sRGlhbWV0ZXIgOiAxO1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSBjaXJjbGVUb1BvbHlnb24oY2VudGVyLCBkaWFtZXRlciAvIDIsIDEyOCwgZmVhdHVyZVByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdlb21ldHJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdHJ1Y3QgdHlwZVwiKTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIHN0cnVjdHNbcy4kLm5hbWVdID0geyBnZW9tZXRyeSwgY2VudGVyIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cnVjdHM7XG59XG5mdW5jdGlvbiBzcXVhcmVBcm91bmQoY2VudGVyQ29vcmRzLCBsZW5ndGgsIHdpZHRoLCB1bml0cywgcHJvcGVydGllcykge1xuICAgIGNvbnN0IGNlbnRlciA9IHBvaW50KGNlbnRlckNvb3Jkcyk7XG4gICAgY29uc3Qgbm9ydGhFYXN0ID0gY2xvbmUoY2VudGVyKTtcbiAgICB0cmFuc2Zvcm1UcmFuc2xhdGUobm9ydGhFYXN0LCB3aWR0aCAvIDIsIDI3MCwgeyB1bml0cywgbXV0YXRlOiB0cnVlIH0pO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShub3J0aEVhc3QsIGxlbmd0aCAvIDIsIDAsIHsgdW5pdHMsIG11dGF0ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBub3J0aFdlc3QgPSBjbG9uZShjZW50ZXIpO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShub3J0aFdlc3QsIHdpZHRoIC8gMiwgOTAsIHsgdW5pdHMsIG11dGF0ZTogdHJ1ZSB9KTtcbiAgICB0cmFuc2Zvcm1UcmFuc2xhdGUobm9ydGhXZXN0LCBsZW5ndGggLyAyLCAwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgY29uc3Qgc291dGhXZXN0ID0gY2xvbmUoY2VudGVyKTtcbiAgICB0cmFuc2Zvcm1UcmFuc2xhdGUoc291dGhXZXN0LCB3aWR0aCAvIDIsIDkwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgdHJhbnNmb3JtVHJhbnNsYXRlKHNvdXRoV2VzdCwgbGVuZ3RoIC8gMiwgMTgwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgY29uc3Qgc291dGhFYXN0ID0gY2xvbmUoY2VudGVyKTtcbiAgICB0cmFuc2Zvcm1UcmFuc2xhdGUoc291dGhFYXN0LCB3aWR0aCAvIDIsIDI3MCwgeyB1bml0cywgbXV0YXRlOiB0cnVlIH0pO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShzb3V0aEVhc3QsIGxlbmd0aCAvIDIsIDE4MCwgeyB1bml0cywgbXV0YXRlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHBvaW50cyA9IFtcbiAgICAgICAgbm9ydGhFYXN0Lmdlb21ldHJ5LmNvb3JkaW5hdGVzLCBub3J0aFdlc3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsXG4gICAgICAgIHNvdXRoV2VzdC5nZW9tZXRyeS5jb29yZGluYXRlcywgc291dGhFYXN0Lmdlb21ldHJ5LmNvb3JkaW5hdGVzLFxuICAgICAgICBub3J0aEVhc3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXNcbiAgICBdO1xuICAgIHJldHVybiBwb2x5Z29uKFtwb2ludHNdLCBwcm9wZXJ0aWVzKTtcbn1cbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vL1xuaW1wb3J0IHhtbDJqcyBmcm9tICd4bWwyanMnO1xuLy8vLy8vLy8vL1xuaW1wb3J0IHsgZmVhdHVyZUNvbGxlY3Rpb24gfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBhcmVhIGZyb20gJ0B0dXJmL2FyZWEnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7IFByb2o0RGVmcyB9IGZyb20gJy4vcHJvamVjdGlvbic7XG5pbXBvcnQgeyBnZXRQcm9wIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGNvbnZlcnRTdXJmYWNlcyB9IGZyb20gJy4vc3VyZmFjZSc7XG5pbXBvcnQgeyBjb252ZXJ0UGFyY2VscyB9IGZyb20gJy4vcGFyY2VsJztcbmltcG9ydCB7IGNvbnZlcnRQaXBlTmV0d29ya3MgfSBmcm9tICcuL3BpcGUtbmV0d29yayc7XG5pbXBvcnQgeyBjb252ZXJ0Q0dQb2ludHMgfSBmcm9tICcuL2NnLXBvaW50JztcbmV4cG9ydCBjb25zdCBQUk9KRUNUSU9OX0FVVE9fREVURUNUID0gJ2F1dG9fZGV0ZWN0JztcbmV4cG9ydCBjb25zdCBDT05WRVJUX1NVUkZBQ0VTID0gJ3N1cmZhY2VzJztcbmV4cG9ydCBjb25zdCBDT05WRVJUX1BBUkNFTFMgPSAncGFyY2Vscyc7XG5leHBvcnQgY29uc3QgQ09OVkVSVF9QSVBFX05FVFdPUktTID0gJ3BpcGVfbmV0d29ya3MnO1xuZXhwb3J0IGNvbnN0IENPTlZFUlRfQ0dfUE9JTlRTID0gJ2NnX3BvaW50cyc7XG5jb25zdCBjb252ZXJ0ZXJzID0ge1xuICAgIFtDT05WRVJUX1BBUkNFTFNdOiBjb252ZXJ0UGFyY2VscyxcbiAgICBbQ09OVkVSVF9TVVJGQUNFU106IGNvbnZlcnRTdXJmYWNlcyxcbiAgICBbQ09OVkVSVF9QSVBFX05FVFdPUktTXTogY29udmVydFBpcGVOZXR3b3JrcyxcbiAgICBbQ09OVkVSVF9DR19QT0lOVFNdOiBjb252ZXJ0Q0dQb2ludHMsXG59O1xuLy8gQmFzZWQgb24gYWxleGdsZWl0aCdzIHByZWxpbWluYXJ5IHdvcmtcbi8vIGdpdGh1Yi5jb20vYWxleGdsZWl0aC9sYW5kLXhtbC10by1nZW9qc29uXG5leHBvcnQgY2xhc3MgQ29udmVydGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHByb2plY3Rpb246IFBST0pFQ1RJT05fQVVUT19ERVRFQ1QsXG4gICAgICAgICAgICBlbmFibGVkQ29udmVydGVyczogW0NPTlZFUlRfU1VSRkFDRVMsIENPTlZFUlRfUEFSQ0VMUywgQ09OVkVSVF9QSVBFX05FVFdPUktTLCBDT05WRVJUX0NHX1BPSU5UU10sXG4gICAgICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9qNERlZnM6IFtcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiRVBTRzoyODM1NVwiLFxuICAgICAgICAgICAgICAgICAgICBcIitwcm9qPXV0bSArem9uZT01NSArc291dGggK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIC4uLlByb2o0RGVmcyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBmZWF0dXJlTWFwcGVyOiAoZmVhdHVyZSwgb3B0cykgPT4gZmVhdHVyZSxcbiAgICAgICAgICAgIGNvbG9yT3B0czoge1xuICAgICAgICAgICAgICAgIGh1ZTogJ2JsdWUnLFxuICAgICAgICAgICAgICAgIGx1bWlub3NpdHk6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBzZWVkOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdG9HZW9KU09OKHhtbCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnBhcnNlciwgb3B0cy5wYXJzZXIpO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgeG1sMmpzLlBhcnNlcihwYXJzZXJPcHRpb25zKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVQcm9qNChvcHRzLnByb2o0RGVmcyk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBwYXJzZXIucGFyc2VTdHJpbmcoeG1sLCAoZXJyLCB4bWxPYmopID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgbGV0IGdlb2pzb247XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvanNvbiA9IHRoaXMuY29udmVydFRvR2VvSlNPTih4bWxPYmosIG9wdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZ2VvanNvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnZlcnRUb0dlb0pTT04oeG1sT2JqLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIG9wdHMpO1xuICAgICAgICAvLyBVc2Ugc3BlY2lmaWVkIHByb2plY3Rpb24gb3IgdHJ5IHRvIGZpbmQgb25lIGluIHRoZSBMYW5kWE1MIGZpbGVcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHRoaXMuZ2V0TGFuZFhNTFByb2plY3Rpb24oeG1sT2JqLCBvcHRpb25zLnByb2plY3Rpb24gfHwgdGhpcy5kZWZhdWx0T3B0aW9ucy5wcm9qZWN0aW9uKTtcbiAgICAgICAgaWYgKCFwcm9qZWN0aW9uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIHByb2plY3Rpb24gY2FuIG5vdCBiZSBmb3VuZCAhXCIpO1xuICAgICAgICAvLyBMaXN0IGVuYWJsZWQgY29udmVydGVyc1xuICAgICAgICBjb25zdCBlbmFibGVkQ29udmVydGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5lbmFibGVkQ29udmVydGVycykgP1xuICAgICAgICAgICAgb3B0cy5lbmFibGVkQ29udmVydGVycyA6XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRPcHRpb25zLmVuYWJsZWRDb252ZXJ0ZXJzO1xuICAgICAgICBsZXQgZmVhdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gQ29udmVydCBMYW5kWE1MIGVudGl0aWVzIHRvIEdlb0pTT04gZmVhdHVyZXNcbiAgICAgICAgZW5hYmxlZENvbnZlcnRlcnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgIGlmICghKGMgaW4gY29udmVydGVycykpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRpbmcgY29udmVydCAnJXMnLi4uXCIsIGMpO1xuICAgICAgICAgICAgY29uc3QgbmV3RmVhdHVyZXMgPSBjb252ZXJ0ZXJzW2NdKHhtbE9iaiwgcHJvamVjdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICBmZWF0dXJlcy5wdXNoKC4uLm5ld0ZlYXR1cmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFwcGx5IGZlYXR1cmVzIG1hcHBlciBmdW5jdGlvbiBpZiBkZWZpbmVkXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mZWF0dXJlTWFwcGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmZWF0dXJlcyA9IGZlYXR1cmVzLm1hcChmID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mZWF0dXJlTWFwcGVyKGYsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydCBmZWF0dXJlIGJ5IHJldmVyc2UgYXJlYVxuICAgICAgICAvLyB0byBlYXNlIHJlbmRlcmluZ1xuICAgICAgICBmZWF0dXJlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJlYShhKSA+IGFyZWEoYikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGFyZWEoYSkgPCBhcmVhKGIpKVxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gZXh0cmFjdGVkIGZlYXR1cmVzIGFzIGEgZmVhdHVyZSBjb2xsZWN0aW9uXG4gICAgICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcyk7XG4gICAgfVxuICAgIGNvbmZpZ3VyZVByb2o0KGFkZGl0aW9uYWxQcm9qNERlZnMpIHtcbiAgICAgICAgY29uc3QgcHJvajREZWZzID0gdGhpcy5kZWZhdWx0T3B0aW9ucy5wcm9qNERlZnMuc2xpY2UoMCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxQcm9qNERlZnMpKVxuICAgICAgICAgICAgcHJvajREZWZzLnB1c2goLi4uYWRkaXRpb25hbFByb2o0RGVmcyk7XG4gICAgICAgIHByb2o0LmRlZnMocHJvajREZWZzKTtcbiAgICB9XG4gICAgZ2V0TGFuZFhNTFByb2plY3Rpb24oeG1sT2JqLCBtYW51YWxQcm9qZWN0aW9uKSB7XG4gICAgICAgIGlmIChtYW51YWxQcm9qZWN0aW9uICE9PSBQUk9KRUNUSU9OX0FVVE9fREVURUNUKVxuICAgICAgICAgICAgcmV0dXJuIG1hbnVhbFByb2plY3Rpb247XG4gICAgICAgIGxldCBwcm9qZWN0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKCFwcm9qZWN0aW9uKVxuICAgICAgICAgICAgcHJvamVjdGlvbiA9IHRoaXMuZmluZFVUTVByb2plY3Rpb24oeG1sT2JqKTtcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb247XG4gICAgfVxuICAgIGZpbmRVVE1Qcm9qZWN0aW9uKHhtbE9iaikge1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uID0gZ2V0UHJvcCh4bWxPYmosIFwiTGFuZFhNTFwiLCBcIkNvb3JkaW5hdGVTeXN0ZW1cIiwgMCwgXCIkXCIsIFwiZGF0dW1cIik7XG4gICAgICAgIGNvbnN0IHpvbmUgPSBnZXRQcm9wKHhtbE9iaiwgXCJMYW5kWE1MXCIsIFwiQ2dQb2ludHNcIiwgMCwgXCIkXCIsIFwiem9uZU51bWJlclwiKTtcbiAgICAgICAgbGV0IHV0bVByb2plY3Rpb24gPSBudWxsO1xuICAgICAgICBpZiAocHJvamVjdGlvbiAmJiB6b25lKSB7XG4gICAgICAgICAgICB1dG1Qcm9qZWN0aW9uID0gYCtwcm9qPXV0bSArem9uZT0ke3pvbmV9ICtzb3V0aCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmcyBgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dG1Qcm9qZWN0aW9uO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGdldFByb3AsIHBhcnNlU2VxdWVuY2UsIGdldENvbG9yIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IHBvbHlnb24gfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBwcm9qNCBmcm9tICdwcm9qNCc7XG5leHBvcnQgY29uc3QgTEFORFhNTF9QQVJDRUwgPSAncGFyY2VsJztcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGFyY2Vscyh4bWxPYmosIHByb2plY3Rpb24sIG9wdHMpIHtcbiAgICBjb25zdCBvcmlnaW5hbFBvaW50cyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJDZ1BvaW50c1wiLCAwLCBcIkNnUG9pbnRcIik7XG4gICAgY29uc3Qgb3JpZ2luYWxQYXJjZWxzID0gZ2V0UHJvcCh4bWxPYmosIFwiTGFuZFhNTFwiLCBcIlBhcmNlbHNcIiwgMCwgXCJQYXJjZWxcIik7XG4gICAgY29uc3QgcG9pbnRzID0ge307XG4gICAgY29uc3QgcG9seWdvbnMgPSBbXTtcbiAgICAvLyBQYXJzZSBvdXQgdGhlIHBvaW50c1xuICAgIGZvciAobGV0IHB0IGluIG9yaWdpbmFsUG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IG9yaWdpbmFsUG9pbnRzW3B0XTtcbiAgICAgICAgY29uc3QgbmFtZSA9IG9wdC4kLm5hbWUucmVwbGFjZSgvIC9nLCAnJyk7XG4gICAgICAgIGxldCBjb29yZHMgPSBwYXJzZVNlcXVlbmNlKG9wdC5fKS5tYXAoY29vcmQgPT4gcGFyc2VGbG9hdChjb29yZCkpO1xuICAgICAgICBjb29yZHMgPSBbY29vcmRzWzFdLCBjb29yZHNbMF0sIGNvb3Jkc1syXV07XG4gICAgICAgIGNvb3JkcyA9IHByb2o0KHByb2plY3Rpb24sICdXR1M4NCcsIGNvb3Jkcyk7XG4gICAgICAgIHBvaW50c1tuYW1lXSA9IGNvb3JkcztcbiAgICB9XG4gICAgLy8gUGFyc2Ugb3V0IHRoZSBwYXJjZWxzXG4gICAgZm9yIChsZXQgcGMgaW4gb3JpZ2luYWxQYXJjZWxzKSB7XG4gICAgICAgIHZhciBvcGMgPSBvcmlnaW5hbFBhcmNlbHNbcGNdO1xuICAgICAgICB2YXIgZ2VvbSA9IG9wYy5Db29yZEdlb207XG4gICAgICAgIGlmIChnZW9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBjb29yZHMgPSBbXTtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHRvIGFkZCBhdCB0aGUgZW5kXG4gICAgICAgICAgICB2YXIgZW5kQ29vcmQgPSBudWxsO1xuICAgICAgICAgICAgdmFyIG9yaWdDb29yZHMgPSBvcGMuQ29vcmRHZW9tWzBdLkxpbmU7XG4gICAgICAgICAgICBmb3IgKGxldCBvYyBpbiBvcmlnQ29vcmRzKSB7XG4gICAgICAgICAgICAgICAgLy8gVkVSWSBpbXBvcnRhbnQgbm90ZS4gVGhpcyBjb2RlIGRvZXMgTk9UIGhhbmRsZSB0aGUgb3RoZXIgdHdvIHR5cGVzXG4gICAgICAgICAgICAgICAgLy8gb2YgY29vcmRpbmF0ZSBkZWZpbml0aW9ucywgY3VydmVzIGFuZCBpcnJlZ3VsYXIgbGluZXMuIFRPRE86IGZpeG1lLlxuICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IG9yaWdDb29yZHNbb2NdLlN0YXJ0WzBdLiQucG50UmVmO1xuICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgZW5kIChpdCBwcm9iYWJseSBzaG91bGQgYmUgY2hlY2tlZCwgYmVjYXVzZSBpZiB0aGUgZW5kIGlzbid0IHRoZSBzdGFydClcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gb3JpZ0Nvb3Jkc1tvY10uRW5kWzBdLiQucG50UmVmO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydFBvaW50ID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0ZhaWxlZCB0byBnZXQgc3RhcnQgcG9pbnQnLCBzdGFydCwgc3RhcnRQb2ludClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGNyZWF0aW5nIHRoZSBwb2x5Z29uXG4gICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHBvaW50c1tzdGFydF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZENvb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgZmlyc3QgY29vcmQsIHRvIHB1dCBiYWNrIG9uIHRvIGNsb3NlIHRoZSBwb2x5Z29uXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb29yZCA9IHBvaW50c1tzdGFydF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29vcmRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICBjb29yZHMucHVzaChlbmRDb29yZCk7XG4gICAgICAgICAgICAgICAgY29vcmRzID0gW2Nvb3Jkc107XG4gICAgICAgICAgICAgICAgLy8gbmFtZT1cIjEwMVwiIGNsYXNzPVwiTG90XCIgc3RhdGU9XCJwcm9wb3NlZFwiICBwYXJjZWxUeXBlPVwiU2luZ2xlXCJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogb3BjLiQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGFuZHhtbENsYXNzOiBvcGMuJC5jbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgbGFuZHhtbFN0YXRlOiBvcGMuJC5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbGFuZHhtbFBhcmNlbFR5cGU6IG9wYy4kLnBhcmNlbFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGxhbmR4bWxUeXBlOiBMQU5EWE1MX1BBUkNFTCxcbiAgICAgICAgICAgICAgICAgICAgbGFuZHhtbENvbG9yOiBnZXRDb2xvcihgcGFyY2VsLSR7bmFtZX1gLCBvcHRzLmNvbG9yT3B0cyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwb2x5Z29ucy5wdXNoKHBvbHlnb24oY29vcmRzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkNvdWxkbid0IGNyZWF0ZSBhIHBvbHlnb24gYmVjYXVzZSB3ZSBmb3VuZCBsZXNzIHRoYW4gMiBjb29yZHNcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiTm8gZ2VvbWV0cnlcIilcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9seWdvbnM7XG59XG4iLCJpbXBvcnQgeyBnZXRQcm9wLCBwYXJzZVNlcXVlbmNlLCBnZXRDb2xvciB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBwb2x5Z29uIH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgdW5pb24gZnJvbSAnQHR1cmYvdW5pb24nO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmV4cG9ydCBjb25zdCBMQU5EWE1MX1NVUkZBQ0UgPSAnc3VyZmFjZSc7XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFN1cmZhY2VzKHhtbE9iaiwgcHJvamVjdGlvbiwgb3B0cykge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgY29uc3Qgc3VyZmFjZXNDb250YWluZXJOb2RlcyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJTdXJmYWNlc1wiKTtcbiAgICBpZiAoIXN1cmZhY2VzQ29udGFpbmVyTm9kZXMpXG4gICAgICAgIHJldHVybiBmZWF0dXJlcztcbiAgICBzdXJmYWNlc0NvbnRhaW5lck5vZGVzLmZvckVhY2goc2MgPT4ge1xuICAgICAgICBjb25zdCBhdHRycyA9IChzYy4kIHx8IHt9KTtcbiAgICAgICAgY29uc3QgYmFzZVByb3BzID0ge1xuICAgICAgICAgICAgbmFtZTogYXR0cnMubmFtZSB8fCBcIlwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGF0dHJzLmRlc2MsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN1cmZhY2VOb2RlcyA9IGdldFByb3Aoc2MsIFwiU3VyZmFjZVwiKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHN1cmZhY2VOb2RlcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN1cmZhY2VOb2Rlcy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGJhc2VQcm9wcy5uYW1lID8gKGJhc2VQcm9wcy5uYW1lICsgJyAtICcgKyBzLiQubmFtZSkgOiBzLiQubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYmFzZVByb3BzLmRlc2NyaXB0aW9uID8gKGJhc2VQcm9wcy5kZXNjcmlwdGlvbiArICcgLSAnICsgcy4kLmRlc2MpIDogcy4kLmRlc2M7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlUHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgbGFuZHhtbFR5cGU6IExBTkRYTUxfU1VSRkFDRSxcbiAgICAgICAgICAgICAgICBsYW5keG1sQ29sb3I6IGdldENvbG9yKGBzdXJmYWNlLSR7bmFtZX1gLCBvcHRzLmNvbG9yT3B0cyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHN1cmZhY2VGZWF0dXJlcyA9IGNvbnZlcnRCb3VuZGFyaWVzKHMsIHByb2plY3Rpb24sIGZlYXR1cmVQcm9wcywgb3B0cyk7XG4gICAgICAgICAgICBpZiAoc3VyZmFjZUZlYXR1cmVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goLi4uc3VyZmFjZUZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1cmZhY2VGZWF0dXJlcyA9IGNvbnZlcnRGYWNlcyhzLCBwcm9qZWN0aW9uLCBmZWF0dXJlUHJvcHMsIG9wdHMpO1xuICAgICAgICAgICAgICAgIGxldCBtZXJnZWQgPSBzdXJmYWNlRmVhdHVyZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkFwcGx5aW5nIHVuaW9uIHRvICVzIGZhY2VzICglZCBmYWNlcyB0byBtZXJnZSlcIiwgbWVyZ2VkLnByb3BlcnRpZXMubmFtZSwgc3VyZmFjZUZlYXR1cmVzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzdXJmYWNlRmVhdHVyZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBzdXJmYWNlRmVhdHVyZXNbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQgPSB1bmlvbihtZXJnZWQsIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCItLT4gQ291bGQgbm90IGFwcGx5IHVuaW9uIHRvICVzICgjJWQpXCIsIG5leHQucHJvcGVydGllcy5uYW1lLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXJnZWQucHJvcGVydGllcyA9IGZlYXR1cmVQcm9wcztcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKG1lcmdlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmZWF0dXJlcztcbn1cbmZ1bmN0aW9uIGNvbnZlcnRGYWNlcyhzdXJmYWNlLCBwcm9qZWN0aW9uLCBmZWF0dXJlUHJvcHMsIG9wdHMpIHtcbiAgICBjb25zdCBwb2ludE5vZGVzID0gZ2V0UHJvcChzdXJmYWNlLCBcIkRlZmluaXRpb25cIiwgMCwgXCJQbnRzXCIsIDAsIFwiUFwiKTtcbiAgICBjb25zdCBmYWNlTm9kZXMgPSBnZXRQcm9wKHN1cmZhY2UsIFwiRGVmaW5pdGlvblwiLCAwLCBcIkZhY2VzXCIsIDAsIFwiRlwiKTtcbiAgICBjb25zdCBwb2ludHMgPSB7fTtcbiAgICBwb2ludE5vZGVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGxldCBwb2ludENvb3JkcyA9IHBhcnNlU2VxdWVuY2UocC5fKS5tYXAodiA9PiBwYXJzZUZsb2F0KHYpKTtcbiAgICAgICAgcG9pbnRDb29yZHMgPSBbcG9pbnRDb29yZHNbMV0sIHBvaW50Q29vcmRzWzBdLCBwb2ludENvb3Jkc1syXV07XG4gICAgICAgIHBvaW50Q29vcmRzID0gcHJvajQocHJvamVjdGlvbiwgJ1dHUzg0JywgcG9pbnRDb29yZHMpO1xuICAgICAgICBjb25zdCBwb2ludElkID0gcC4kLmlkO1xuICAgICAgICBwb2ludHNbcG9pbnRJZF0gPSB7IG5hbWU6IHAuJC5uYW1lLCBjb29yZHM6IHBvaW50Q29vcmRzIH07XG4gICAgfSk7XG4gICAgY29uc3QgZmFjZXMgPSBbXTtcbiAgICBmYWNlTm9kZXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgY29uc3QgcG9pbnRJZHMgPSBwYXJzZVNlcXVlbmNlKGYpO1xuICAgICAgICBjb25zdCBjb29yZHMgPSBbXTtcbiAgICAgICAgcG9pbnRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwID0gcG9pbnRzW2lkXTtcbiAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHAuY29vcmRzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvb3Jkcy5wdXNoKHBvaW50c1twb2ludElkc1swXV0uY29vcmRzKTtcbiAgICAgICAgZmFjZXMucHVzaChwb2x5Z29uKFtjb29yZHNdLCBmZWF0dXJlUHJvcHMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gWy4uLmZhY2VzXTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRCb3VuZGFyaWVzKHN1cmZhY2UsIHByb2plY3Rpb24sIGZlYXR1cmVQcm9wcywgb3B0cykge1xuICAgIGNvbnN0IGJvdW5kYXJ5Tm9kZXMgPSBnZXRQcm9wKHN1cmZhY2UsIFwiU291cmNlRGF0YVwiLCAwLCBcIkJvdW5kYXJpZXNcIiwgMCwgXCJCb3VuZGFyeVwiKTtcbiAgICBpZiAoIWJvdW5kYXJ5Tm9kZXMpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICBjb25zdCBwb2x5Z29ucyA9IFtdO1xuICAgIGJvdW5kYXJ5Tm9kZXMuZm9yRWFjaChib3VuZGFyeSA9PiB7XG4gICAgICAgIGNvbnN0IHBudExpc3QzRE5vZGUgPSBnZXRQcm9wKGJvdW5kYXJ5LCAnUG50TGlzdDNEJywgMCk7XG4gICAgICAgIGNvbnN0IHNlcSA9IHBhcnNlU2VxdWVuY2UocG50TGlzdDNETm9kZSkubWFwKHAgPT4gcGFyc2VGbG9hdChwKSk7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgbGV0IGMgPSBbc2VxW2kgKyAxXSwgc2VxW2ldXTtcbiAgICAgICAgICAgIGMgPSBwcm9qNChwcm9qZWN0aW9uLCAnV0dTODQnLCBjKTtcbiAgICAgICAgICAgIGNvb3Jkcy5wdXNoKGMpO1xuICAgICAgICB9XG4gICAgICAgIGNvb3Jkcy5wdXNoKGNvb3Jkc1swXSk7XG4gICAgICAgIHBvbHlnb25zLnB1c2gocG9seWdvbihbY29vcmRzXSwgZmVhdHVyZVByb3BzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBvbHlnb25zO1xufVxuIiwiaW1wb3J0IHsgZ2V0UHJvcCwgcGFyc2VTZXF1ZW5jZSwgZ2V0Q29sb3IgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmV4cG9ydCBjb25zdCBMQU5EWE1MX1BPSU5UID0gJ2NnX3BvaW50JztcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0Q0dQb2ludHMoeG1sT2JqLCBwcm9qZWN0aW9uLCBvcHRzKSB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBbXTtcbiAgICBjb25zdCBwb2ludHNDb250YWluZXJOb2RlcyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJDZ1BvaW50c1wiKTtcbiAgICBpZiAoIXBvaW50c0NvbnRhaW5lck5vZGVzKVxuICAgICAgICByZXR1cm4gZmVhdHVyZXM7XG4gICAgcG9pbnRzQ29udGFpbmVyTm9kZXMuZm9yRWFjaChwYyA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gKHBjLiQgfHwge30pO1xuICAgICAgICBjb25zdCBiYXNlUHJvcHMgPSB7XG4gICAgICAgICAgICBuYW1lOiBhdHRycy5uYW1lIHx8IFwiXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXR0cnMuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcG9pbnROb2RlcyA9IGdldFByb3AocGMsIFwiQ2dQb2ludFwiKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50Tm9kZXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwb2ludE5vZGVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gYmFzZVByb3BzLm5hbWUgPyAoYmFzZVByb3BzLm5hbWUgKyAnIC0gJyArIHAuJC5uYW1lKSA6IHAuJC5uYW1lO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBiYXNlUHJvcHMuZGVzY3JpcHRpb24gPyAoYmFzZVByb3BzLmRlc2NyaXB0aW9uICsgJyAtICcgKyBwLiQuZGVzYykgOiBwLiQuZGVzYztcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBsYW5keG1sVHlwZTogTEFORFhNTF9QT0lOVCxcbiAgICAgICAgICAgICAgICBsYW5keG1sQ29sb3I6IGdldENvbG9yKGBwb2ludC0ke25hbWV9YCwgb3B0cy5jb2xvck9wdHMpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50RmVhdHVyZSA9IGNvbnZlcnRQb2ludChwLCBwcm9qZWN0aW9uLCBmZWF0dXJlUHJvcHMsIG9wdHMpO1xuICAgICAgICAgICAgZmVhdHVyZXMucHVzaChwb2ludEZlYXR1cmUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmVhdHVyZXM7XG59XG5mdW5jdGlvbiBjb252ZXJ0UG9pbnQoY2dQb2ludCwgcHJvamVjdGlvbiwgZmVhdHVyZVByb3BzKSB7XG4gICAgbGV0IHBvaW50Q29vcmRzID0gcGFyc2VTZXF1ZW5jZShjZ1BvaW50Ll8pLm1hcCh2ID0+IHBhcnNlRmxvYXQodikpO1xuICAgIHBvaW50Q29vcmRzID0gW3BvaW50Q29vcmRzWzFdLCBwb2ludENvb3Jkc1swXSwgcG9pbnRDb29yZHNbMl1dO1xuICAgIHBvaW50Q29vcmRzID0gcHJvajQocHJvamVjdGlvbiwgJ1dHUzg0JywgcG9pbnRDb29yZHMpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogXCJQb2ludFwiLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFsuLi5wb2ludENvb3Jkc10sXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLmZlYXR1cmVQcm9wcyxcbiAgICAgICAgICAgIGxhbmR4bWxBbHRpdHVkZTogcG9pbnRDb29yZHNbMl0sXG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18oNjAwNyk7XG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODIxKTtcbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IG1vZHVsZVsnZGVmYXVsdCddIDpcblx0XHQoKSA9PiBtb2R1bGU7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyJdLCJzb3VyY2VSb290IjoiIn0= |